我试图实现一个名为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());
}
}
答案 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的新实例 - 如果有特殊的构造函数,请使用它。