抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一道较简单的Leetcode题,判断两个二叉树是否相同。

原题链接

image.pmg

数据范围
  • 两棵树上的节点数目都在范围 [0, 100] 内
  • -104 <= Node.val <= 104

思路

既然要判断是否相同,那么就要遍历树的每一个节点了。

注意到数据范围节点数在100以内,不算太大。考虑用递归的方法(太大会爆栈)深度优先搜索的思路来解决。

  • 如果两个树都能成功到达边界,那么说明这一路上都是匹配的,可以直接return true了。
  • 如果一个到了边界另一个没到,说明这两个树绝对不是相同的,就return false
  • 如果两个储存的值对不上的话,那么也是说明树不相同。return false
  • 此外没到边界的话就递归下去。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution
{
public:
bool isSameTree(TreeNode *p, TreeNode *q)
{
if (!p && !q) //两节点都到达边界
return true;
if (!p || !q) //只有一个节点到达边界 (结合上个if语句想想之间的逻辑关系,为什么能这样写)
return false;
if (p->val != q->val) //数值不同
return false;
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); //递归左右节点,&&保证左右子节点都满足条件
}
};

评论