序文
バイナリツリートラバーサル順トラバーサル、その後のトラバース、トラバース順序で、先行順走査を持っています。その後、我々は道の再帰と非再帰的トラバーサルの多様性を達成するために約以下の通りであった、ツリーノードが定義されています。
クラスツリーノード{
int型のval;
TreeNodeの左。
TreeNodeの右;
ツリーノード(INT X){ヴァル= X。}
}
予約限定トラバーサル
先行順走査は、バイナリツリーのルートノードの私たちの最初のトラバーサルを意味し、その後、左のノードを横断し、最終的に右のノード
再帰
公共のボイド予約限定(TreeNodeの根){
IF(ルート== NULL){
リターン;
}
現在のノードの//出力値
System.out.println(root.val)。
//トラバースDOサブツリー
プレオーダー(root.left)。
//右のサブツリーをトラバース
プレオーダー(root.right)。
}
非再帰
公共のボイド予約限定(TreeNodeの根){
IF(ルート== NULL){
リターン;
}
//スタックの特性の高度なうちによれば、第1 root.rightは預金root.leftに堆積します
スタックスタック=新しいスタック<>();
stack.push(ルート)。
しばらく(!stack.isEmpty()){
ツリーノードのノード= stack.pop()。
System.out.println(node.val)。
もし(node.right!= NULL){
stack.push(node.right)。
}
もし(node.left!= NULL){
stack.push(node.left)。
}
}
}
予約限定!
再帰
公共のボイドmidOrder(TreeNodeの根){
IF(ルート== NULL){
リターン;
}
//トラバースDOサブツリー
プレオーダー(root.left)。
現在のノードの//出力値
System.out.println(root.val)。
//右のサブツリーをトラバース
プレオーダー(root.right)。
}
非再帰
公共のボイドmidOrder(TreeNodeの根){
IF(ルート== NULL){
リターン;
}
スタックスタック=新しいスタック<>();
行う {
//左ノードは、スタックにプッシュされているされている場合
しばらく(ルート!= NULL){
stack.push(ルート)。
ルート= root.left。
}
//スタックは、子どもたちが存在する場合、我々はプッシュし続けなければならない、権利を持っているかどうかを判断します
ツリーノードのノード= stack.pop()。
System.out.println(node.val)。
もし(node.right!= NULL){
ルートはnode.right =。
}
}一方(ルート= NULL || stack.isEmpty()!)。
}
後順
再帰
公共のボイドafterOrder(TreeNodeの根){
IF(ルート== NULL){
リターン;
}
//トラバースDOサブツリー
プレオーダー(root.left)。
//右のサブツリーをトラバース
プレオーダー(root.right)。
現在のノードの//出力値
System.out.println(root.val)。
}
非再帰
公共のボイドafterOrder(TreeNodeの根){
IF(ルート== NULL){
リターン;
} 鄭州婦人科どのhttp://www.zzkdfk.com/
子供が最初のルートノード、S2の一番下にルートノードへの権利を横断しなければならないため、// 2つのスタックでは、達成するために
スタックS1 =新しいスタック<>();
スタックS2 =新しいスタック<>();
s1.push(ルート)。
しばらく(!s1.isEmpty()){
ツリーノードのノード= s1.pop()。
もし(node.left!= NULL){
s1.push(node.left)。
}
もし(node.right!= NULL){
s1.push(node.right)。
}
s2.push(ノード)。
}
しばらく(!s2.isEmpty()){
System.out.println((s2.pop)ヴァル。);
}
}
レイヤー前順
配列トラバーサルあるレベルのノードバイナリツリートラバーサルに出指し、IはBFSトラバースAノードを使用して、リストにノードを仮定する。
公共一覧> LEVELORDER(TreeNodeの根){
//訪問の各層の結果を格納
一覧>リスト=新しいArrayListを<>();
IF(ルート== NULL){
リストを返します。
}
各階層ノードの//ストアキュー手段
キューキュー=新しいLinkedBlockingQueue <>();
queue.add(ルート)。
しばらく(!queue.isEmpty()){
一覧リストは=新しいArrayListを<>();
INTサイズ= queue.size()。
//は現在、キュー内のすべてのノードは、キュー内の各ノードの、左と右の子供たちは、より低い出力サイクルを提供するには、Get
以下のために(; I <サイズ、整数iが0 = I ++){
ツリーノードのノード= queue.poll()。
list.add(node.val)。
もし(node.left!= NULL){
queue.add(node.left)。
}
もし(node.right!= NULL){
queue.add(node.right)。
}
}
//リストにそれぞれの層をリスト
lists.add(リスト);
}
リストを返します。
}