Java でBinary Threadedツリーのpreorderトラバーサルのコードを書こうとしています。私は次のコードを書きました。これはいくつかの例に当てはまりますが、いくつかのエッジ シナリオを見落としているのではないかと心配しています。
詳細情報ノードには、ノードの左右の子をそれぞれ指す左右 の 2 つの参照があります。successorと呼ばれるブール フィールドは、正しいポインターが子または後続のトラバーサルを指しているかどうかを決定します (successor==false の場合:右のポインターが子を指し、そうでない場合は、順序どおりのトラバーサル サクセサーを指します) 。
誰かがここで私の論理の欠陥を指摘できれば幸いです...
public void threadedPreorder(){
IntThreadedTreeNode prev, p=root; //pointers to binary tree nodes
while(p!=null){
while(p.left!=null){ //traversal to leftmost node
visit(p); //while visiting it
p=p.left;
}
visit(p);
prev=p;
p=p.right; //shift to right or successor
if(p!=null && prev.successor){ //avoid visiting the same node twice
while(p!=null && prev.successor){
prev=p;
p=p.right;
}
}
}
}
どんな助けでも大歓迎です... :)