这段代码的算法思想是通过递归来判断两棵二叉树是否相同。以下是详细的解释:
-
递归终止条件:如果两棵树的当前节点
p
和q
都是null
,则说明在这个节点上它们是相同的,所以返回true
。这是因为两棵树的对应节点都不存在,属于相同的情况。 -
节点不匹配的情况:如果只有一个节点是
null
,而另一个不是,则说明两棵树结构不同,因此直接返回false
。 -
比较节点值:如果当前节点
p
和q
都存在,则先比较它们的值是否相同。如果当前节点的值不相等,则返回false
,因为它们在这个节点上已经不同。 -
递归检查子树:如果当前节点值相同,则递归检查它们的左子树和右子树。如果左子树和右子树都分别相同,则整棵树相同;否则,不同。
通过这种递归的方式,该算法可以逐层检查两棵树的每一个节点,确保它们在结构和节点值上完全一致。
java">class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p == null && q == null) return true;if((p == null && q != null) || (p != null && q == null)) return false;//执行到这里说明p和q都非空,此时比较二者的数值return (p.val == q.val) && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}