我这里有两种反映 BST 的算法。它们都工作正常,但据我了解,第二个是递归的,第一个是尾递归的。我知道在 Java 中,编译器不会针对尾递归进行优化,但我的问题是——在任何其他语言中,这两种算法中哪种算法更好?这是一个过于主观的问题吗?
public Node mirror(Node root, Node newRoot) {
newRoot.item = root.item;
if (root.right != null) {
newRoot.left = new Node();
newRoot.left.item = root.right.item;
mirror(root.right, newRoot.left);
}
if (root.left != null) {
newRoot.right = new Node();
newRoot.right.item = root.left.item;
mirror(root.left, newRoot.right);
}
return newRoot;
}
///VERSION 2////
public Node mirror(Node currentNode) {
if (currentNode == null) {
return null;
} else {
Node newnode = new Node();
newnode.item = currentNode.item;
newnode.left = mirror(currentNode.right);
newnode.right = mirror(currentNode.left);
return newnode;
}
}