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 /