Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何复制LinkedBinaryTreeJava?_Java_Tree - Fatal编程技术网

如何复制LinkedBinaryTreeJava?

如何复制LinkedBinaryTreeJava?,java,tree,Java,Tree,我正在尝试实现一个名为mirror()的方法,该方法会反转树,但不会更改原始树。我已经做了一个翻转和更改原始树的方法,我计划复制原始树,然后翻转新树。我被困在实现原始树的复制上 /** Returns a mirrored copy of the tree */ public LinkedBinaryTree<E> mirror() { LinkedBinaryTree<E> reversed = new LinkedBinaryTree<E>();

我正在尝试实现一个名为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());
    }           
}
/**返回树的镜像副本*/
公共链接的二进制树镜像(){
LinkedBinaryTree reversed=新建LinkedBinaryTree();
}
公共无效副本(位置p){
}
/**使树倒转*/
公共无效撤销{
如果(this.root!=null){
反向帮助(this.root);
}
}
私人无效反向帮助(位置p){
Node=(Node)p;
if(node.getLeft()!=null){
Node temp=Node.getLeft();
node.setLeft(node.getRight());
节点设置权限(temp);
}else if(node.getRight()!=null){
Node temp=Node.getLeft();
node.setLeft(node.getRight());
节点设置权限(temp);
}
if(node.getLeft()!=null){
reverseHelper(node.getLeft());
}
if(node.getRight()!=null){
reverseHelper(node.getRight());
}           
}

也许类似的东西会有所帮助:

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;
}
私人职位重复(职位p){
Node=(Node)p;
Node newNode=新节点();
//根据需要设置节点的内容。
if(node.getLeft()!=null){
setLeft(重复(node.getLeft());
} 
if(node.getRight()!=null){
setRight(重复(node.getRight());
}
返回newNode;
}

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

到目前为止,您在复制树方面做了哪些尝试?@Assafs我尝试使用addRoot(),类似于这样的内容:reversed.addRoot(this.root.getElement());reversed.reverseMe();return reversed;我在下面给您写了一个答案。如果它有助于您解决问题并复制您的树,我可以请您接受答案(只需单击答案旁边的灰色复选标记,使其变为绿色)我能说服你接受下面的答案吗?只需单击旁边的灰色复选标记,将其变为绿色。我将非常感激。这是我在过去几个月里唯一一个未被接受的答案。尝试完成一组:-)