次のノードのバイナリツリー - 安全プランを証明します

タイトル説明

前記ノードの指定されたバイナリツリーは、先行順走査順序とリターンの次のノードを見つけます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。
 
Aは考えた:Xianxiangは、ノード上で発見され、その後、前順で
パブリック クラスソリューション{
         ブールフラグ= 
    TreeLinkNode結果 = nullを公共TreeLinkNode GetNextの(TreeLinkNode PNODE)
    { 
        場合(PNODE == NULL戻り ヌル
        TreeLinkNodeヘッド = PNODE。
        一方、(head.next!= NULL ){ 
            ヘッド = head.next。
        } 
        midOrder(頭部、PNODE)。
        戻り値の結果; 
    } 

    プライベート のボイドmidOrder(TreeLinkNodeツリー、TreeLinkNode PNODE){
         場合(!tree.left = NULL ){ 
            midOrder(tree.left、PNODE)。
        } 
        であれば(フラグ&&結果== NULL ){//判断結果== NULL非常重要防止上层修改結果的值
            結果 = 木。
            リターン; 
        } 
        であれば(tree.val == pNode.val && tree.left == pNode.left && tree.right == pNode.right && tree.next == pNode.next){ 
            フラグ = 
        } 
        であれば(tree.right!= NULL ){ 
            midOrder(tree.right、PNODE)。 
        } 
    } 
}

思考2​​:

リンク:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e
ソース:牛顧客ネットワークは

2つのカテゴリに分けることができる:1、右サブツリーを有し、その後、次のノードが右サブツリー左端点で、2、 Nは、I、L:右サブツリーない、例えば()親の左の子ノードである、2つのタイプに分けることができる )、 次に親ノードが次のノードである親ノードの右の子であり、b)は、(例えば:H、 J、K、M)現在のノードがその親の場所の左の子になるまで...彼の親の親の親ノードを探しています。何たとえばがない場合:Mは、彼がテール・ノードです。

パブリック クラスソリューション{
           公共TreeLinkNode GetNextの(TreeLinkNode PNODE)
    { 
        場合(PNODE == NULL ){
             戻り ヌル
        } 
        であれば(pNode.right!= NULL ){ 
            PNODE = pNode.right。
            一方、(!pNode.left = NULL ){ 
                PNODE = pNode.left。
            } 
            戻りPNODEと、
        } 
        TreeLinkNode TEM = PNODE。
        しばらく pNode.next(!=NULL ){ 
            PNODE = pNode.next。
            もし(pNode.left == TEM){
                 戻りPNODE。
            } 
            TEM = PNODE。
        } 
        戻り  ヌル
    } 

}

 

 

おすすめ

転載: www.cnblogs.com/nlw-blog/p/12466748.html