Java実装バイナリ挿入、トラバーサル、反転動作

直接コードに取り付けられています。コードは、それは非常に簡単です、説明しています。

バイナリツリーは、クラス(ここではI直接中国の定義、私の地元のエンジニアリング多くの知識ので、中国名で見つけるのは簡単)を定義します。

com.service.commonバイナリツリーをパッケージ化。

パブリッククラス二叉树<T> {
    パブリック文字列の名前。
    公共Tのデータ。
    公共二叉树<T>左;
    公共二叉树<T>右;
    プライベートブールのisLeaf。

    パブリックバイナリツリー(){

    }

    パブリックバイナリツリー(Tデータ){
        this.dataはDATA =;
    }

    パブリック文字列のgetName(){
        名を返します。
    }

    公共ボイドのsetName(文字列名){
        NAME =名前。
    }

    パブリックTのgetData(){
        データを返します。
    }

    公共ボイドのsetData(Tデータ){
        データ=データ。
    }

    公共二叉树<T> getLeft(){
        左を返します。
    }

    公共ボイドsetLeft(二叉树<T>左){
        左=左。
    }

    パブリックバイナリ<T> GetRightの(){
        戻り右;
    }

    公共ボイドsetRight(二叉树<T>右){
        右=右。
    }

    パブリックブールgetIsLeaf(){
        のisLeafを返します。
    }

    公共ボイドsetIsLeaf(ブールのisLeaf){
        this.isLeaf =のisLeaf。
    }

}

操作のバイナリツリーベースの一部の方法(多くの方法が類推され、先行順トラバーサルここだけ引用します)

 

 

com.service.commonバイナリツリーをパッケージ化。

java.util.LinkedListのインポート。
java.util.Queueのインポート。

輸入org.apache.poi.ss.formula.functions.T;

パブリッククラスバイナリ操作{

    //挿入
    公共ボイドインサート(バイナリの<string>ルート、文字列データ) {// バイナリツリーのノードに挿入された
        IF(root.getData()== NULL){
            root.Data =データ;
        } {他
            (IFデータ。 compareTo大よりバイナリツリーのルートの(root.Data)> 0)//右ノード
            {
                IF(root.Right == NULL){
                    root.Right =新しい新しいバイナリツリー(データ);
                }他{
                    this.insert(ルート。右、データ);
                }
            } //小よりバイナリツリーのルートの他{左ノード
                IF(root.Left == NULL){
                    root.Left =新しい新しいバイナリツリー(データ);
                }他{
                    this.insert(root.Left 、データ)。
                }
            }
        }
    }

    //最初の再帰的なバイナリツリートラバーサルシーケンス
    行きがけトラバーサル前に公共のボイド(バイナリ<文字列>ルート){
        トラバーサルの//左から右の順
        であれば(root.getLeft()!= NULL ){
            先行順走査(root.getLeft()) ;
        }
        のSystem.out.println(root.getData()); //親ノードの出力

        (!root.getRight()= nullの場合 ){
            先行順走査(root.getRight());
        }
    }

    //バイナリ反転
    公共ボイド反転バイナリ(二値の<string>ルート){
        IF(ルート== NULL){
            リターン;
        }
        バイナリの<string> leftTemp root.getRight =();
        root.Right root.getLeft =() ;
        root.Left = leftTemp;
        この反転バイナリツリー(root.Right);.
        この反転バイナリツリー(root.Left);
    }

    //使用同じスタック、後者は、ここでだけトラバースするためのツールとして、交換、高度とFIFOとの間の差である
    公共のバイナリ<T>の反転、非再帰的なキューを使用して(バイナリ<T>ルート){
        キュー<バイナリ<T >>キュー=新しいLinkedListの<バイナリ<T >>();
        キュー内の//最初のルートノード
        Queue.offer(ルート);
        キューにキューノードによって//バイナリツリーように左右トラバーサル。
        しばらく(!queue.isEmpty()){ // 単にスタックの深さが小さくなるに比べて再帰的。スタックオーバーフローがケースではありません
            //最初のステップ取らルート
            バイナリ<T> temptree = queue.poll() ; // 要素を取得し、除去
            交換が左右サブツリー@
            バイナリ<T> = leftTemp temptree.Left;
            temptree。 temptree.Right =左;
            temptree.Right = leftTemp;
            左のサブツリーをキューに配置されていない場合は、//は空になり、その後、左の部分木のツリーに切り替える
            IF {(temptree.Left = nullを!)
                キューを。
            }
            //右サブツリー同じ理由
            IF(temptree.Right = NULL!){
                Queue.offer(temptree.Right);
            }
        }

        ルートを返します。
    }

    公共の静的な無効メイン(文字列[]引数){
        二項演算treeOperate =新しいバイナリ演算();
        バイナリツリー=新しいバイナリツリー();
        treeOperate.insert(ツリー、」4" 。);
        treeOperate.insert(木、 "2") ;
        treeOperate.insert(木、」3。 ");
        treeOperate.insert(ツリー、" 4。 ");
        treeOperate.insert(木、" 5 ");
        treeOperate.insert(ツリー、" 6" )
        。treeOperate前順トラバーサル(木);
        // treeOperateは、バイナリツリー(木)を反転; //再帰反転。
        ツリー= treeOperate反転非再帰的キュー(ツリー)を使用して;
        のSystem.out.printlnは(「バイナリは後に反転されます:」 );
        treeOperate先行順トラバーサル(木)までに、

    }

}

 

发布了23 篇原创文章 · 获赞 4 · 访问量 1万+

おすすめ

転載: blog.csdn.net/qq1076472549/article/details/87185724