Problem:
Solution:
判断两棵二叉树是否相等,显然采用递归方式比较简单,但递归方式往往又是晦涩难懂的。这道题的递归算是比较简单,首先我们要搞清楚可能的情况有哪些:
1、如果当前访问的两个结点都为空,那显然他们是相等的;
2、如果两个结点一个为空另一个不为空,那么显然不相等;
3、如果两个结点都不为空但他们的value不行等,那他们也不相等;
4、如果两个结点都不为空且value相等,那么需要做的就是进一步判断他们的左右子树是否相等;
代码如下:
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if (!p && !q) return true;
else if (!p && q) return false;
else if (p && !q) return false;
else if (p && q && p->val != q->val) return false;
else return (isSameTree(p->left,q->left) && isSameTree(p->right,q->right));
}
};