Java测试两个二叉树是一样的

时间:2017-02-18 02:20:30

标签: java binary-tree

更新: 最好的解决方案应该是:

public boolean isSameTree(TreeNode p, TreeNode q) {

    if(p==null&&q==null) return true;
    if(p==null||q==null) return false;

    return isSameTree(p.left, q.left)&&isSameTree(p.right, q.right)&&(p.val==q.val);
}

更新: 谢谢大家,我知道你告诉我的其他解决方案,但我的问题是为什么我的解决方案不起作用。是因为我忽略了一些返回值吗?谢谢!

我已经编写了一个代码来确定两个二叉树是否相同,我使用递归方法来搜索树,但是这个代码有时候不起作用,请你帮忙解决一下? / p>

非常感谢! 这是代码:

/*Definition for a binary tree node.
  public class TreeNode {
  int val;
  TreeNode left;
  TreeNode right;
  TreeNode(int x) { val = x; }
*/

public boolean isSameTree(TreeNode p, TreeNode q) {
    if(p!=null){
        if(q!=null&&p.val==q.val){
            isSameTree(p.left, q.left);
            isSameTree(p.right, q.right);
        }
        else return false;
    }else{
        if(q!=null) return false;
    }
    return true;
}

输入: [10,5,15] [10,5,NULL,NULL,15] 输出: 真正 预期: 假

4 个答案:

答案 0 :(得分:0)

您只是为子树调用isSameTree,但不检查它们的返回值。简洁正确的版本:

{{1}}

另外,@ duffymo不正确,说明你需要使用.equals()而不是==。您正在比较val' s,它们是原语。

答案 1 :(得分:0)

    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p!=null){
            if(q!=null&&p.val==q.val){
                if(!isSameTree(p.left, q.left)) return false;
                if(!isSameTree(p.right, q.right)) return false;
                return true;
            }
            else return false;
        }else{
            if(q!=null) return false;
        }
        return true;
    }

答案 2 :(得分:0)

我假设您有一个get方法来检索数据。您可以解决的一种方法是让isSameTree方法接受空值然后进行比较。

public boolean isSameTree(TreeNode p, TreeNode q) {

        if (p == q) {
            return true;
        }
        if (p == null || q == null) {
            return false;
        }

        return p.get().isSameTree(q.get()) &&
               isSameTree(p.left(), q.left()) &&
               isSameTree(p.right(), q.right());
    } 

另一种方法如下:

public boolean isSameTree(TreeNode p, TreeNode q) 
    {

        if (p == null && q == null)
            return true;


        if (p != null && q != null) 
            return (p.get == q.get
                    && isSameTree(p.left, q.left)
                    && isSameTree(p.right, q.right));


        return false;
    }

答案 3 :(得分:0)

class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
   if (p == null && q == null) 
        return true; 


    if (p != null && q != null)  
        return (p.val == q.val 
                && isSameTree(p.left, q.left) 
                && isSameTree(p.right, q.right)); 


    return false;  
}
}