/ ** *バイナリツリーノードの定義。 *公共のクラスの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-