LeetCode-バイナリツリー

2つのアイデアへのバイナリツリートラバーサル、再帰と非再帰的な注意。

94.バイナリツリートラバーサル順序どおりバイナリ予約限定!

https://leetcode.com/problems/binary-tree-inorder-traversal/

タイトル:バイナリーツリー与えられ、ノードは値の先行順を返します。

アイデア:

クラスのソリューション{
     公共の一覧<整数> inorderTraversal(TreeNodeのルート){ 
        一覧 <整数>リスト= 新しいのArrayList <Integer型> ();
        もし(ルート== nullのリターンリスト。
        inShow(リスト、ルート)。
        戻り値のリスト。
    } 
    
    公共 ボイド inShow(一覧<整数> L、ツリーノードのノード){
         場合(node.left!= NULL ){ 
            inShow(L、node.left)。
        } 
        l.add(node.val)。
        もし(node.right!= nullの){
            inShow(L、node.right)。
        } 
    } 
}

100同じツリー同じツリー

https://leetcode.com/problems/same-tree/

タイトル:2つのバイナリツリーを考えると、それらが同一であるかどうかを確認するための関数を記述します。2つのバイナリツリー構造において同一であり、ノードが同じ値を有する場合、それらは同一であると考えられます。

アイデア:

①:判決は、再帰的深さ優先探索DFSを使用して、同じ原理である前に、2本の木が同一と対称2つのツリーであるかどうかを決定します。

②:バイナリツリートラバーサルの4種類(シーケンス、最初の順序は、順番に、後に)自分の反復と再帰文言を持っているので、非再帰的な解決策はかなり、のは、最初のオーダーのこの反復の文言を見てみましょう、があります同時に2つの数値を横断するように、各ノードは、次に、比較されます。

クラスソリューション{
     パブリック ブールisSameTree(ツリーノードP、ツリーノードQ){
         場合(pが== NULL && qは== NULLを返す もし(!(P = nullの && Q == nullの)||(P == nullを!&& Q = nullを!)||(p.val = q.val))を返す 返す isSameTree(p.left、q.left)&& isSameTree(p.right、q.rightを)。
    } 
}

葉の番号に129合計ルートリーフノードへのルートノードは、値の合計です見つけます

http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/

タイトル:バイナリツリーは0から9までの数字のみを含む場合、各パスの葉へのルートを表してもよい葉の数値例では、ルートパス1-> 2-> 3、数123を表します。葉の全ての数の和のルートを見つけるために。注意:リーフノードが子ノードではありません。

アイデア:

クラスソリューション{
     INT TOT = 0 公共 INT sumNumbers(ツリーノードのルート){
         場合(ルート== NULL 戻り 0 
        CALC(根、 0 );
        リターンTOT; 
    } 
    
    公共 ボイド CALC(ツリーノードのルート、INT currsum){ 
        currsum = currsum * 10 + root.val。
        もし(root.left == NULL && root.right == NULL ){ 
            TOT + = currsum。
            リターン; 
        } 
        もし(!root.left = ヌル
            CALC(root.left、currsum)。
        もし(!root.right = nullの
            CALC(root.right、currsum)。
        返します
    } 
}

144バイナリツリー予約限定トラバーサルバイナリツリーを横断する前に、

https://leetcode.com/problems/binary-tree-preorder-traversal/

タイトル:ノードトラバーサルの戻り値を前順バイナリツリー、与えられました。

アイデア:

クラスのソリューション{
     // 递归实现
    公共一覧<整数> preorderTraversal(TreeNodeのルート){ 
        一覧 <整数>リスト= 新しいのArrayList <Integer型> ();
        もし(ルート== nullのリターンリスト。
        frontShow(リスト、ルート)。
        戻り値のリスト。
    } 
    
    公共 ボイド frontShow(一覧<整数> L、ツリーノードのノード){ 
        l.add(node.val)。
        もし(!node.left = NULL ){ 
            frontShow(L、node.left)。
        } 
        もし node.right(!=NULL ){ 
            frontShow(L、node.right)。
        } 
    } 
}
クラスのソリューション{
     // 非递归实现
    公共一覧<整数> preorderTraversal(TreeNodeのルート){ 
        一覧 <整数>リスト= 新しい LinkedListは<整数> (); 
        スタック <のTreeNode>権利= 新しいスタック<のTreeNode> ();
        一方、(!ルート= NULL ){ 
            list.add(root.val)。
            もし(!root.right = ヌル){ 
                rights.push(root.right)。
            } 
            ルート = root.left。
            もし(ルート== nullの &&!rights.isEmpty()){ 
                ルート = rights.pop()。
            } 
        } 
        戻り値のリスト。
    } 
}

145バイナリツリートラバーサル後順バイナリツリーを横断した後、

https://leetcode.com/problems/binary-tree-postorder-traversal/

タイトル:バイナリツリー所与は、ノードが後順トラバース値を返します。

アイデア:

クラスのソリューション{
     // 递归实现
    公共一覧<整数> postorderTraversal(TreeNodeのルート){ 
        一覧 <整数>リスト= 新しいのArrayList <Integer型> ();
        もし(ルート== nullのリターンリスト。
        backShow(リスト、ルート)。
        戻り値のリスト。
    } 
    
    公共 ボイド backShow(一覧<整数> L、ツリーノードのノード){
         場合(node.left!= NULL ){ 
            backShow(L、node.left)。
        } 
        場合(node.right!= nullを){
            backShow(L、node.right)。
        } 
        l.add(node.val)。
    } 
}

// TODO

トラバーサルバリアント:http://oj.leetcode.com/problems/path-sum/
バリアントを横断:http://oj.leetcode.com/problems/path-sum-ii/
バリアントを横断:HTTP://oj.leetcode .COM /問題/最大深さ優先
のバイナリツリー/ トラバース変異体:http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/
バイナリツリーを再構築:HTTP://oj.leetcode .COM /問題/構築-、バイナリレベル
ツリーから-予約限定と-トラバーサルINORDER / 復興バイナリツリー:http://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-トラバーサル/
レベルの変種トラバース:http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
バリアントを横断:http://oj.leetcode.com/problems/symmetric-tree/
トラバーサルアプリケーション:http://oj.leetcode.com/problems/binary-tree-maximum-path-sum/
トラバーサルアプリケーション:http://oj.leetcode.com/problems/balanced-binary-tree/
トラバーサルアプリケーション:HTTP:// oj.leetcode.com/problems/recover-binary-search-tree/
トラバーサルアプリケーション:http://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/
レベルのトラバース:HTTP:// oj.leetcode.com/problems/binary-tree-level-order-traversal/
レベルトラバース:http://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/
レベルトラバースバリアント:HTTP ://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/
レベルトラバース変種:http://oj.leetcode.com/problems/populating-next-right-pointers-in -各ノード-II /

おすすめ

転載: www.cnblogs.com/nomad1c/p/11576628.html