バイナリツリーとは何ですか?ここでは紹介しません。 Baidu:A Binary Treeを使用できます。ここでは、Javaを使用して「式バイナリツリー」を実装します。
式バイナリツリーの定義
最初のステップは、バイナリツリーの式が何であるかを理解することです。たとえば、式:(a+b×(cd))-e/f。葉のノードに数字を置き、ブランチノードに演算子を置くと、バイナリツリーが形成されます。式を保存するため、「式バイナリツリー」と呼ばれます。
子供用ブーツは、これがどのように構築されたかについて興味があるかもしれません。例として45+23*56/2-5を取ります。最初に最初の番号45を取り出して、リーフノードに入れます。 「+」に遭遇した後、ブランチノードに置きます。
次に、「23」、「*」、「56」、「/」、および「2」を順番に配置します。
最後に " - "と "5"、
それはおおよそそれです。 (私はこれらの写真を自分で描きました、それは醜いです、ただそれらを見てください(⊙⊙))
式バイナリツリーを構築する手順
1.ノードオブジェクトを作成します。
2。オペレーターとデータを区別し、対応するリスト(キュー)に保存します。
3.最初の2つの数値とオペレーターを取り出して、新しい番号ノードを形成します。
4.オペレーターが終了するまでステップ3を繰り返します。
5.ルートノードを最後のノードに等しくします。
式バイナリツリーの実装
まず、データ、左サブツリー、右サブツリー、いくつかのセットを含むノードオブジェクトクラスを構築し、メソッドを取得します。
パッケージtets0714;/** *ノードオブジェクトクラス * @author yuxiu * */public class node {//データプライベート文字列データ; //左サブツリープライベートノードlchild; //右サブツリープライベートノードrchild; node(){} node(string data){this.data = data; } node(string data、node lchild、node rchild){super(); this.data = data; this.lchild = lchild; this.rchild = rchild; } public string getData(){return data; } public node getlChild(){return lchild; } public node getRChild(){return rchild; }}次に、式バイナリツリーを構築します。
パッケージtets0714; import java.util.arraylist;/** *式バイナリツリークラス * @author yuxiu * */public class formalueetree {private string s = "";プライベートノードルート。 // root node/***式の作成バイナリツリーを作成* @param str expression*/public void creattree(string str){//配列リスト、ストアオペレーターを宣言し、追加、削除、乗算と分割、arraylist <string> operatorlist = new arraylist <string>(); //配列リストを宣言し、ノードデータを保存、arrayList <Node> numList = new ArrayList <Node>(); //最初に、演算子とデータを区別して、それを対応するリストに(int i = 0; i <str.length(); i ++){char ch = str.charat(i); //文字列の文字を取得するif(ch> = '0' && ch <= '9'){s+= ch; } else {numlist.add(new node(s)); s = ""; operatorList.Add(ch+""); }} //最後の番号を番号node numlist.add(new node(s))に追加します。 while(operlist.size()> 0){//ステップ3に、オペレーターが終了するまで2番目のステップを繰り返します。 node right = numlist.remove(0); string operator = operatorList.Remove(0);ノードnode = new Node(oper、左、右); numlist.add(0、node); //新しいノードを最初のノードとして好み、インデックス= 0の前のノードがindex = 1}に変更されます//ステップ4、ルートノードを最後のノードルート= numlist.get(0)に等しくします。 } / ***出力ノードデータ* / public void output(){output(root); //ルートノードからトラバーサルを停止}/***出力ノードデータ* @param node*/public void output(node node){if(node.getlChild()!= null){//リーフノードの場合、出力(node.getlchild()); } system.out.print(node.getData()); //トランザクションには、予約注文トラバーサル(ルートの左と右)、順序間トラバーサル(左ルート右)、およびポストオーダートラバーサル(左ルート右)が含まれます(node.getrchild()!= null){output(node.getrchild()); }} public static void main(string [] args){formalueetree tree = new FormalueTree(); tree.creattree( "45+23*56/2-5"); //式のバイナリツリーを作成します。最後に、コンソール(OK)に「45+23*56/2-5」を出力できます。ここで使用されている中間順序トラバーサルでは、友人は事前注文トラバーサルとポストオーダートラバーサルを使用する効果とは何かを試すことができます。トラバーサルについては、後でそれについて話します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。