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

题目要求

给定两个二叉树,判断他们是否相同。注意:必须是完全相同,如果节点值、值得顺序不同都视为不同的树。力扣练习题: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);
    }
}

你可能感兴趣的:(经典算法题,二叉树,算法,leetcode)