思路:
可以利用深度优先搜索BFS,设想给定的两个二叉树中的某个结点,若都为空可以相同,若只有一个为空肯定不同,值不同肯定不同,若当前结点判定相同,再去看左子树是否相同,右子树是否相同,可以用递归实现。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(!p&&!q){return true;}
else if(!p||!q) {return false;}
else if(p->val!=q->val){return false;}
else {return (isSameTree(p->left,q->left)&&isSameTree(p->right,q->right));}
}
};
时间复杂度:O(min(m+n)),m和n分别是两个二叉树结点个数。只要有一个走到空就结束函数,因此被访问到的节点数不会超过较小的二叉树的节点数。
空间复杂度:O(min(m+n)),m和n分别是两个二叉树的结点个数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数。