わかった。私は二分木を持っています、そしてこれは私がそれでやりたいことです:
元のツリーの各ノードの場合:リーフでない場合は、リーフノードに置き換えます。削除されたブランチで更新された元のツリーで計算を実行します。ノードを元の状態に戻します(したがって、ツリーは最初と同じになります)。
問題はこれです:私はスタックを使用してツリーをトラバースしています。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
}
}