直接コードに取り付けられています。コードは、それは非常に簡単です、説明しています。
バイナリツリーは、クラス(ここでは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先行順トラバーサル(木)までに、
}
}