前文バイナリツリートラバーサル
再帰:
公共のArrayList <整数>後順(ツリーノードのルート){ のArrayList <整数> RES =新規のArrayList <整数>(); //采用递归方式 の場合(ルート== nullの) リターンのres; (もし!ルート= null)の res.add(root.val)。 (もし!root.left = null)の postorderTraversal(root.left)。 (もし!root.right = null)の postorderTraversal(root.right)。 解像度を返します。 }
非再帰:
ArrayListの<整数> = RES新しい新しいのArrayList <Integer型>(); 公共のArrayList <Integer型> preorderTraversal(TreeNodeのルート){ //非再帰的な方法:スタックの中に、右のサブツリーにスタックに左のサブツリーをスタックを使用する スタック<ツリーノード> =新しい新しいスタックスタック<ツリーノード>(); IF(ルート== NULL) 戻りRES; IF(=ルートヌル!){ stack.push(ルート); 一方(stack.isEmpty()!){ ツリーノードN- stack.pop =(); res.add(n.val); IF(n.right = nullを!) stack.push(n.right); IF(= nullをn.left!) stack.push(n.left ); } } RESを返します。 } }
オーダーバイナリツリートラバーサルで
再帰:
公共のArrayList <整数> INORDER(ツリーノードのルート){ のArrayList <整数> RES =新規のArrayList <整数>(); //采用递归方式 の場合(ルート== nullの) リターンのres; (もし!root.left = null)の postorderTraversal(root.left)。 res.add(root.val)。 (もし!root.right = null)の postorderTraversal(root.right)。 解像度を返します。 }
非再帰:
公共のArrayList <整数> INORDER(ツリーノードのルート){ のArrayList <整数> RES =新規のArrayList <>(); IF(ルート== NULL){ 戻りRES。 } スタック<ツリーノード>スタック=新しいスタック<>(); ツリーノードのp =ルート。 (!p = NULL || stack.isEmpty()){しばらく するif(!p = NULL){ stack.push(P)。 P = p.left。 }他{ P = stack.pop()。 res.add(p.val)。 P = p.right。 } } RESを返します。 }
バイナリツリートラバーサルシーケンス後
再帰:
公共のArrayList <整数>後順(ツリーノードのルート){ のArrayList <整数> RES =新規のArrayList <整数>(); //采用递归方式 の場合(ルート== nullの) リターンのres; (もし!root.left = null)の postorderTraversal(root.left)。 (もし!root.right = null)の postorderTraversal(root.right)。 res.add(root.val)。 解像度を返します。 }
非再帰:
//!!!対応するパケット導くことを忘れてはいけない {公共のArrayList <Integer型>後順(TreeNodeのルートを) ; ArrayListを<整数> = RES新しい新しいのArrayList <Integer型>() ://非再帰的な方法 IF(ルート== nullの) リターンRES; スタック<のTreeNode > =新しい新しいスタックスタック<ツリーノード>(); ツリーノードPは、ルート=; ツリーノードヌル= R&LT; ながら(!= NULL || stack.isEmpty P()){ IF(!P = NULL){ stack.push(P ); P = p.left; //子が空のままにされるまで、すべての左の子スタック } 他{ P = stack.peekを(); P = p.right; // Ruoguoは、子ノードがスタックにアクセスしない左右上の子要素 の場合(P!= nullの&& P != r)は{ stack.push(P); // Ruoguo右の子、その左の子のすべてがスタック拡張させ P = p.leftを; }そうでなければ{ P = stack.pop(); // Ruoguoない右の子、スタックに入れ、アクセス、 (p.val)をres.add; R&LT = P; // R&LT記録だけ訪問ノード P = NULL; // Pブランキングは、上部要素にアクセスし続けることができます } } } RESを返します; } }