バイナリツリートラバーサル非再帰的及び再帰的トラバーサル

  序文

  バイナリツリートラバーサル順トラバーサル、その後のトラバース、トラバース順序で、先行順走査を持っています。その後、我々は道の再帰と非再帰的トラバーサルの多様性を達成するために約以下の通りであった、ツリーノードが定義されています。

  クラスツリーノード{

  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(リスト);

  }

  リストを返します。

  }

おすすめ

転載: www.cnblogs.com/djw12333/p/12067288.html