[LeetCode]--100. Same Tree

来源:互联网 发布:中国软件行业协会会费 编辑:程序博客网 时间:2024/05/19 22:47

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.

public boolean isSameTree(TreeNode p, TreeNode q) {        if (p == null && q == null)            return true;        if ((p == null && q != null) || (p != null && q == null)) {            System.out.println(2);            return false;        }        if ((p.left != null && q.left == null)                || (p.left == null && q.left != null)                || (p.right == null && q.right != null)                || (p.right != null && q.right == null)) {            System.out.println(1);            return false;        }        if (p.val != q.val)            return false;        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);    }

通过了,但是我在想子树的判断对不对,其实中间那一段代码时可以不要的,因为递归循环到子树的时候(p == null && q != null) || (p != null && q == null)这个判断已经包含了左子树和右子树的判断。

/** * 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;        if ((p == null && q != null) || (p != null && q == null))            return false;        if (p.val != q.val)            return false;        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);    }}

再推荐一种简单的写法,不过我觉得容易混淆。

public boolean isSameTree1(TreeNode p, TreeNode q) {        return (p == null && q == null)                || ((p != null && q != null && p.val == q.val) && (isSameTree1(                        p.left, q.left) && isSameTree(p.right, q.right)));    }
0 0