题目要求
给定两个二叉树,判断他们是否相同。注意:必须是完全相同,如果节点值、值得顺序不同都视为不同的树。力扣练习题:LeetCode-100_相同的树
思路:
- 首先判断两树null的情况。如果A树null且B树不null或者A树不null且B树null,那么可以肯定两树肯定不相等,返回false。
if ((A == null && B != null) || (A != null && B ==null)) {
return false;
}
- 如果两树都为null,则认为两树相同,因此空情况应该分开考虑。
if (A == null && B == null) {
return true;
}
- 空情况判断完,就可以判断值相等与否的问题了。首先判断两树根节点值是否相等。
if (A.val != B.val) {
return false;
}
- 重要:这一步涉及递归思路,排除了空情况和根节点值得情况,就要判断左右子树了。通过递归,将A树的左子树和B树的左子树比较,A树的右子树和B树的右子树比较。这里递归进行条件是A和B树的左子树即A.left和B.left,以及A.right和B.right。而终止条件是第一步和第二步的空判断。因为二叉树从根节点往左右子树走,必然会走到空节点,从而终止递归。而要求左右子树都要相同,因此用&&连接。
return isSameTree(A.left,B.left) && isSameTree(A.right,B.right);
代码
class Solution_100 {
public boolean isSameTree(TreeNode p, TreeNode q) {
//一个为空,一个不为空
if ((p == null && q != null) || (p != null && q ==null)) {
return false;
}
//两个树都为空
if (p == null && q == null) {
return true;
}
if (p.val != q.val) {
return false;
}
//且左右子树都相等
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
}
该博客介绍了如何使用Java解决LeetCode的100_相同的树问题。博主首先讨论了判断两棵二叉树是否相同的逻辑,包括检查空树的情况以及比较根节点值。接着,博主阐述了利用递归方法比较左右子树的过程,指出在递归过程中,当遇到空节点时会终止递归,并且左右子树必须都相同才认为两棵树相同。
1140

被折叠的 条评论
为什么被折叠?



