レベルのバイナリツリートラバーサル関連するトピック

102バイナリツリー階層トラバーサル

クラスのソリューション{ 
パブリック:
    ベクトル<ベクトル<int型>> LEVELORDER(TreeNodeの*ルート){ 
        ベクトル<ベクトル<int型>> RES。
        (ルート== nullptr)であれば
            、リターンのres; 
        
        キュー<TreeNodeの*> QUE。
        que.push(ルート)。
        一方、{(que.empty()!)
            INT N = que.size()。//记录当前层元素的个数
            ベクトル<整数>レベル; 
            {ため(iは++; iがn <I = 0 INT) 
                )(ツリーノード* TMP = que.frontと、
                que.pop(); 
                level.push_back(tmp-> val)で、
                もし(tmp->左)
                    que.push(tmp->左)。
                IF(tmp->右) 
                    QUE。
            }
            res.push_back(レベル)。
            
        } 
        RESを返します。
    } 
}。

  

107二分木階層トラバーサルII

バイナリツリーを考えると、ノードは、ボトムアップ型の値の階層トラバーサルを返します。(すなわち、ルートノードのリーフノードから層への物理層によって、層トラバーサルによって層は左から右へ)

方法:キューの使用、各トラバース次々に、補間結果を用いて走査ヘッダ。逆の順序を達成するために、二次元配列の先頭に挿入されます。

クラスのソリューション{ 
パブリック:
    ベクトル<ベクトル<int型>> levelOrderBottom(TreeNodeの*ルート){ 
        ベクトル<ベクトル<int型>> RES。
        (ルート== nullptr)であれば
            、リターンのres; 
        
        キュー<TreeNodeの*> QUE。
        que.push(ルート)。
        一方、{(que.empty()!)
            INT N = que.size()。
            ベクトル<整数>レベル; 
            {ため(iは++; iがn <I = 0 INT) 
                )(ツリーノード* TMP = que.frontと、
                que.pop(); 
                level.push_back(tmp-> val)で、
                もし(tmp->左)
                    que.push(tmp->左)。
                (tmp->右)であれば
                    QUE。 
            } 
            res.insert(res.begin()、レベル)。
            
        } 
        RESを返します。
    } 
}。  

16msの実行

(再帰逆によって実装)再帰的方法を用いる方法II

{ソリューションクラスの
パブリック:
    ベクトル<ベクトル<int型>> levelOrderBottom(TreeNodeの*ルート){ 
        ベクトル<ベクトル<int型>> RES; 
        IF(ルート== nullptr a)に
            戻りRESを、
        キュー<*のTreeNode> QUE; 
        que.push(ルート); 
        levelOrderBottom(QUE、RES); 
        戻りRES; 
        
    } 
    ボイドlevelOrderBottom(キュー<*ツリーノード> QUE、ベクトル<ベクトル<INT >>&RES){ 
        IF(que.empty())
            戻り、
        ベクトル<整数> ARR。
        キュー<ツリーノード*> queNext; //ストレージノード層用
        {//現在の層に記憶されたARRながら、及びqueNextに格納されたノードの下位層(que.empty()!)。再帰的に、最終的に配列arrの解像度に押し込み
            * tmpは= QUEのTreeNode。 
            )(que.pop。
            arr.push_back(tmp-> val)で、
            もし(tmp->左)
                queNext.push(tmp->左)。
            もし(tmp->右)
                queNext.push(tmp->右)。    
        } 
        
        levelOrderBottom(queNext、RES)。
        res.push_back(ARR)。
        返します。
    } 
}。

  

 

レベルトラバース103バイナリツリー千鳥(ジグザグトラバーサル)

方法A:2つのスタック

2つのそれぞれのスタックデータ記憶層は、高度な機能に加えて、ノードの順序についての詳細は、(特定のコード誰でも見ることができる)スタックは、Z字状のジグザグアクセス配列に正確に対応しています。

右往左时右先入栈,左往右时,左先入栈。
クラスのソリューション{ 
パブリック:
    ベクトル<ベクトル<int型>> zigzagLevelOrder(のTreeNode *ルート){ 
        ベクトル<ベクトル<int型>> RES。
        (ルート== nullptr)であれば
            、リターンのres; 
        
        スタック<TreeNodeの*> STA1、STA2。
        ベクトル<整数>編曲。
        ツリーノード* TMP =ルート。
        sta1.push(TMP)。
        一方、(TRUE){ 
            ながら(!sta1.empty()){ 
                TMP = sta1.top()。
                sta1.pop(); 
                arr.push_back(tmp-> val)で、
                もし(tmp->左)
                    sta2.push(tmp->左)。
                もし(tmp->右)
                    sta2.push(tmp->右)。
            (もし!arr.empty()){ 
                res.push_back(ARR)。
                arr.clear(); //一定要清零
            }       
            他に
                ブレーク。
            
            (!sta2.empty()){一方
                TMP = sta2.top()。
                sta2.pop(); 
                arr.push_back(tmp-> val)で、
                もし(tmp->右)
                    sta1.push(tmp->右)。
                もし(tmp->左)
                    sta1.push(tmp->左)。
                
            } 
            IF(!arr.empty()){ 
                res.push_back(ARR)。
                arr.clear(); //一定要清零
            } 
                ブレーク; 
        } 
        RESを返します。
    } 
}。

  

 

おすすめ

転載: www.cnblogs.com/GuoXinxin/p/11705955.html