如何复制LinkedBinaryTree java?

时间:2017-08-29 13:31:02

标签: java tree

我试图实现一个名为mirror()的方法,它反转树但不会更改原始树。我已经制作了一个翻转和更改原始树的方法,我打算复制原始树,并翻转新树。我坚持实现原始树的复制。

/** Returns a mirrored copy of the tree */
public LinkedBinaryTree<E> mirror() {
    LinkedBinaryTree<E> reversed = new LinkedBinaryTree<E>();

}

public void duplicate(Position<E> p) {

}

/** Reverses the tree */
public void reverseMe() {
    if (this.root != null) {
        reverseHelper(this.root);
    }
}

private void reverseHelper(Position<E> p) {
    Node<E> node = (Node<E>)p;

    if (node.getLeft() != null) {
        Node<E> temp = node.getLeft();
        node.setLeft(node.getRight());
        node.setRight(temp);

    } else if (node.getRight() != null) {
        Node<E> temp = node.getLeft();
        node.setLeft(node.getRight());
        node.setRight(temp);
    }

    if (node.getLeft() != null) {
        reverseHelper(node.getLeft());
    }

    if (node.getRight() != null) {
        reverseHelper(node.getRight());
    }           
}

1 个答案:

答案 0 :(得分:2)

也许这样的事情会有所帮助:

private Position<E> duplicate (Position<E> p) {
    Node<E> node = (Node<E>)p;
    Node<E> newNode = new Node<E>();

    //Set the contents of the node as needed.

    if (node.getLeft() != null) {
        newNode.setLeft(duplicate(node.getLeft());
    } 
    if (node.getRight() != null) {
        newNode.setRight(duplicate(node.getRight());
    }
    return newNode;
}

请注意,任何节点的内容都需要复制到评论建议的位置,并且我以最基本的方式创建了Node的新实例 - 如果有特殊的构造函数,请使用它。