【问题标题】:Java: Deep Copy in Binary Search Tree ClassJava:二叉搜索树类中的深度复制
【发布时间】:2016-04-09 23:27:33
【问题描述】:

我试图在 BinarySearchTree 类中键入一个深拷贝方法,但我很难理解这里的逻辑。能否请您向我解释一下我该如何度过这个难关?

这是我的 main():

public static void main(String[] args) {
        BinarySearchTree<String> bst1 = new BinarySearchTree<String>();
        BinarySearchTree<String> bst2 = new BinarySearchTree<String>();

        String[] words = {"hello", "world", "how", "are", "you", "doing"};

        for (int i = 0; i < words.length; i++) {
            bst1.add(words[i]);
        }

        bst1.copy(bst2);

}

这些是我的 copy() 方法(请记住,这些在 BinarySearchTree 类中):

public void copy(BinarySearchTree<E> bst2){
    copy(this.root, bst2.root);
}

private void copy(Node<E> bst1, Node<E> bst2){      
    bst2.data = bst1.data;

    if(bst1.left != null){
        bst2.left = bst1.left;
        copy(bst1.left, bst2.left);
    }
    if(bst1.right != null){
        bst2.right = bst1.right;
        copy(bst1.right, bst2.right);
    }
}

请帮助我理解逻辑并使代码正常工作。

谢谢!

【问题讨论】:

标签: java binary-tree binary-search-tree


【解决方案1】:

我意识到我的错误。我应该使用 bst2 作为 BinarySearchTree 而不是节点。这就是改正后的方法。

public void copy(BinarySearchTree<E> bst2){
    copy(bst1.root, this);
}

private void copy(Node<E> bst1, BinarySearchTree<E> bst2) {
    if (bst1 == null) {
        return;
    } else if (bst1.left == null && bst1.right == null) {
        bst2.add(bst1.data);
    } else {
        bst2.add(bst1.data);

        if (bst1.left != null) {
            copy(bst1.left, bst2);
        }

        if (bst1.right != null) {
            copy(bst1.right, bst2);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2010-12-24
    相关资源
    最近更新 更多