原题目:100. Same Tree
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
Subscribe to see which companies asked this question
看了很多的博客,我都没有很好的理解,可能是我比较笨的原因吧,所以我在这里分享下我的解题思路。
1.改题目中提到两棵树是相同的树有两个条件,一个是结构相同,另外一个是节点上的数值是必须相等的。根据这个条件我有如下心理活动:
1)值相等,这个很容易理解。
2)结构相同是什么?我理解为:两个节点要不都为空,要不都有左右子树。
然后陷入了一个怪圈,最后写了一大堆无用的代码,虽然勉强通过了,但是在2)中其实我陷入了没有必要的思维误区中。针对于两个节点来说,左右子树都是针对于下一个节点了,在这里其实是递归的下一层了,不应该在这考虑的。针对二叉树的例子来说,我们关注的只要是这一层的节点就行了。
于是正确的思维逻辑应该是;
A:值相等。
B:这两个节点是否为空。递归考虑其子节点。
java的AC代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null)
return true;
else if (p == null || q == null)
return false;
return p.val == q.val && isSameTree(p.left, q.left)
&& isSameTree(p.right, q.right);
}
}