Java判断两个二叉树是否相同+递归

该博客介绍了如何使用Java解决LeetCode的100_相同的树问题。博主首先讨论了判断两棵二叉树是否相同的逻辑,包括检查空树的情况以及比较根节点值。接着,博主阐述了利用递归方法比较左右子树的过程,指出在递归过程中,当遇到空节点时会终止递归,并且左右子树必须都相同才认为两棵树相同。
题目要求

给定两个二叉树,判断他们是否相同。注意:必须是完全相同,如果节点值、值得顺序不同都视为不同的树。力扣练习题:LeetCode-100_相同的树

思路:
  1. 首先判断两树null的情况。如果A树null且B树不null或者A树不null且B树null,那么可以肯定两树肯定不相等,返回false。
if ((A == null && B != null) || (A != null && B ==null)) {
            return false;
        }
  1. 如果两树都为null,则认为两树相同,因此空情况应该分开考虑。
if (A == null && B == null) {
            return true;
        }
  1. 空情况判断完,就可以判断值相等与否的问题了。首先判断两树根节点值是否相等。
if (A.val != B.val) {
            return false;
        }
  1. 重要:这一步涉及递归思路,排除了空情况和根节点值得情况,就要判断左右子树了。通过递归,将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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值