给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的
#include <iostream>// Definition for a binary tree node.
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if (p == nullptr && q == nullptr) {return true;}if (p == nullptr || q == nullptr) {return false;}return (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);}
};int main() {// 创建两棵二叉树TreeNode* p = new TreeNode(1);p->left = new TreeNode(2);p->right = new TreeNode(3);TreeNode* q = new TreeNode(1);q->left = new TreeNode(2);q->right = new TreeNode(3);Solution solution;if (solution.isSameTree(p, q)) {std::cout << "same" << std::endl;} else {std::cout << "different" << std::endl;}return 0;
}
这段代码定义了一个 TreeNode 结构体表示二叉树节点,以及一个 Solution 类包含了 isSameTree 方法来比较两棵二叉树是否相同。在 main 函数中创建了两棵二叉树,并调用 isSameTree 方法进行比较。
时间复杂度:O(min(N, M)),其中 N 和 M 分别是两棵树的节点数量。这是因为在比较过程中,我们需要递归地遍历每个节点,并且在最坏情况下,我们需要比较两棵树的所有节点。
空间复杂度:O(min(N, M)),递归调用的深度取决于两棵树中较小的节点数量。在最坏情况下,如果两棵树完全不同,递归调用的深度将达到较小的节点数量。