好的。我有一个二叉树,这就是我想要做的:
对于原始树中的每个节点:如果它不是叶子,则将其替换为叶子节点。对使用删除的分支更新的原始树进行计算。将节点恢复到原来的样子(所以现在树与开始时相同)。
问题是这样的:我正在使用堆栈遍历树。如果我将 stack.pop() 节点更改为叶子,这不会删除原始树中的任何分支。这与您为什么可以这样做的原因相同:
int x=1
int y=x
y++
x 仍然等于 1。对此有一个技术术语,但我忘记了。
那么如何编辑原始树中的节点并仍然遍历它呢?
这基本上就是我现在正在做的遍历树:
public void iterativePreorder(Node root) {
Stack nodes = new Stack();
nodes.push(root);
Node currentNode;
while (!nodes.isEmpty()) {
currentNode = nodes.pop();
Node right = currentNode.right();
if (right != null) {
nodes.push(right);
}
Node left = currentNode.left();
if (left != null) {
nodes.push(left);
}
//This is where you do operations on the currentNode
}
}