java - 测试两个二叉搜索树是否具有相同的元素集?

标签 java binary-search-tree

我刚刚开始使用 java 和递归方法,我需要一些帮助: 我需要确定两个二叉搜索树是否具有完全相同的元素集,无论树的结构如何。

我编写了一个方法来检查树是否包含一个元素,并调用 contains()

这是我到目前为止得到的:

    public boolean sameContents(Node n2) {

    if (contains(n2, n2.key) && n2.left == null && n2.right == null) { return true; }
    if (contains(n2, n2.key) && n2.left != null) { sameContents(n2.left); }
    if (contains(n2, n2.key) && n2.right != null) { sameContents(n2.right); }
     return false; 
   }

基本上我的想法是,只要节点仍然有子节点并且树匹配,该方法就会运行。 我用例如 testTree1.sameContents(testTree2); 调用该方法但该方法总是返回 false... 有人可以指出这应该如何完成吗?

最佳答案

最好的方法是使用 Iterator object - 如果两个二叉搜索树包含相同的元素,那么它们的迭代器的 next 方法应该返回相同的值(即使它们的结构不同)。

// returns true if the trees are equivalent, else false
Iterator itr1 = tree1.getIterator();
Iterator itr2 = tree2.getIterator();
while(itr1.hasNext() && itr2.hasNext()) {
    if(!itr1.next().equals(itr2.next())) {
        return false;
    }
}
return !itr1.hasNext() && !itr2.hasNext(); // returns true if trees were the same size, else false

你应该已经有了一个中序二叉树遍历方法,所以你已经有了一个迭代器 - 只需添加一个 ArrayList/Stack 来代替调用堆栈,这样你就可以暂停遍历(无论何时)进行递归方法调用,将当前节点存储到堆栈中)

关于java - 测试两个二叉搜索树是否具有相同的元素集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192581/

相关文章:

java - 如何从 Apache Flink 配置仪表板隐藏敏感配置数据?

Java 嵌套类函数

java - 输出最大分数

haskell IO : convert IO String to "Other type"

c - 大于 BST 中某个数字的节点之和

c++ - 查找一棵树是否为单声道(所有元素都是唯一的)的函数?

java - Java SE 1.7 中的原始类型二叉搜索树问题

java - @Valid (jsr 303) 在 Spring mvc 3.0 中不起作用

Javaslang - 如何加入两个成功的尝试?

java - SQLite 'No such table error'