检查2 BST是否等于值

时间:2014-01-24 07:06:57

标签: java recursion binary-search-tree

我正在研究一个代码,用于确定2 BST在值方面是否相等。

这是我提出的,但它只会返回true,我真的不知道问题是什么。

 public boolean same(BSTree t2) {
    return sameTree(root, t2);
  }

    private boolean sameTree(TreeNode n, BSTree other) {//L-M-R
    boolean found = false;
    if (n != null) {
        sameTree(n.getLeftNode(), other);

        if (other.search(n.getData())) {
            found = true;
        }
        sameTree(n.getRightNode(), other);
    }
    return found;
}

在main方法中,我创建了2个BST并在其中插入了值。然后我打电话给我以后调用方法:

   System.out.println("Are the trees the same: " + tree1.same(tree2));

3 个答案:

答案 0 :(得分:1)

你的逻辑是关闭的。这就是它现在正在做的事情:你经历每个节点。如果它在另一个BST中找到,则代码集被发现为true但是如果其中一个孩子不在其他树中呢?你递归地调用这个孩子的函数,结果证明是假的但是没有那个返回的值。最后,您只检查第一个呼叫(根)是否在第二个BST中。

要解决此问题,请在每次调用后进行检查,以查看返回的值是否为false。如果是,则一起退出递归并返回false。

答案 1 :(得分:1)

此代码存在两个问题:

  1. 您忽略了对sameTree
  2. 的递归调用的结果
  3. 仅检查tree1中是否包含tree2。即使tree2中的节点多于tree1中的节点,它也会返回true。

答案 2 :(得分:0)

我尝试了一种不同的方法,在这里(工作得非常好!)

public boolean same(BST t1,BST t2){
        return sameHelper(t1.root,t2.root)
  }
    private boolean sameHelper(TreeNode n1,TreeNode n2){
       if(n1==n2){
          return true;
         }else if(n1==null||n2==null){   
             return false;
         }else{
           return ((n1.data==n2.data) && (n1.llink==n2.llink) && (n1.rlink==n2.rlink));
       }

就像你们说的那样,在我之前的方法中,我只检查根,当根相同时它返回true。