(再帰的及び非再帰)バイナリツリーのトラバース[Javaの要約

前文バイナリツリートラバーサル

再帰:

公共の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を返します; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/yaogungeduo/p/11245116.html