8、バイナリツリー内の次のノード

質問をすることなく、数日が経過した後、今日の質問これを見てください。

前記ノードの指定されたバイナリツリーは、検索 トラバーサル順序INORDER 次ノードと戻ります。ツリー内のノードは、左と右の子ノードだけでなく、親ノードが指すポインタが含まれている含まれていることに注意してください。
 
ノード構造を次のように

パブリッククラスTreeLinkNode {
  int型のval;
  TreeLinkNodeは=ヌルを残しました。
  TreeLinkNode右= NULL;
  TreeLinkNode次= NULL;

  TreeLinkNode(int型のval){
  this.val =ヴァル。
  }
}

次のように:

右の子ノードがある場合(1)、点の次のノードを右サブツリーの左端の子ノードです。

次の分析ノードを右部分木ではないノードは、その後、右のサブツリーを持っていない場合、例:

ノードがその親ノードの左の子ノードである場合(1)、その次のノードは、その親ノードです。

このノードがその親ノードの右の子である場合には(2)、この状況はより複雑である、我々はそれが見つかるまで親ノードを横断するポインタを維持する必要があるノードを発見した(その親ノードの子を残しましたこのノードは、その親ノードの子を残している場合)。いいえ、そのようなノードの場合は、現在のノードが順トラバーサルで最後のノードです。

パブリック クラスソリューション{ 

    公共TreeLinkNodeのGetNext(TreeLinkNode•PNODE)
    {    
        IF(•PNODE == nullのリターン はnull ;
         // 指定されたノードの現在の右の子が空でない
        IF(!pNode.right = ヌル){ 
            •PNODE = pNode.right。
             しばらく(!pNode.left = ヌル){ 
                •PNODE = pNode.left; 
            } 
            リターン•のPNODE; 
        } 
        // 以下は、右の子ノードである空の場合された
         // 親ノードは空ではありません
        しばらく(!pNode.next = ヌル
        {     
            // 子ノード現在のノードが親ノードがある場合は、親ノードが現在のノードの次のノードである
            IF(pNode.next.left == •PNODE)
                 を返すpNode.nextを; 
            •PNODE = pNode.next; 
        } 
        戻り NULL ; 
    } 
}

 

 

 

おすすめ

転載: www.cnblogs.com/Aug-20/p/11774140.html