次のノードのバイナリツリー(ノードは、先行順走査シーケンス内の次のノードを見つける前記バイナリツリー与えられます)

 

 

/ **
 *バイナリツリーノードの定義。
 *公共のクラスのTreeNode {
 * int型のval;
 *のTreeNodeは左。
 *ツリーノードを右。
 *のTreeNodeの父。
 *ツリーノード(INT X){ヴァル= X。}
 *}
 * / 
クラスソリューション{

    / **
     *バイナリツリーノードの先行順走査で次のノードを取得します。
     *
     * @Param P Aノード
     * @Return Pの次のノード
      * / 
    公共のTreeNode inorderSuccessor(ツリーノードP){
         IF(p == NULL ){
             戻り ヌル
        }

        TreeNodeのCUR = p.right。

        // 右のサブツリーが空でない
        IF(CURを!= ヌル){
             しばらく(cur.leftを!= ヌル){
                CUR = cur.left。
            }
            リターンCUR。
        }

        // 右子树为空 
        のTreeNode父= p.father。
        しばらく(父!= nullの && father.left!= {P)
            P = 父; = p.father。
        }
        戻り値の父。
    }
}

それは右の親ノードであるか分析し、なぜ次の分のために見

いくつかの例があります

 

 シナリオ2

 

 あなたが知りたいのであればノードの親ノードの左ノードを横断することによりノードに等しいです。

それは、そのサイクルの終わりである  == father.left のp-

 

 

おすすめ

転載: www.cnblogs.com/laolei11/p/11881427.html