ミッションの詳細
前のレベルではバイナリ ツリーの事前順序トラバーサルを実装しましたが、このレベルではバイナリ ツリーの順序トラバーサルを実装します。
このレベルのタスク: バイナリ リンク リストに格納されているバイナリ ツリーの順序トラバーサル アルゴリズムを実現します。
関連情報
二分木に関する知識については、前のレベルを参照してください。
バイナリツリーの順序トラバース
バイナリ ツリーをインオーダーでトラバースする場合、ノードへのアクセス順序はインオーダー シーケンスです。つまり、最初に左側のサブツリーにアクセスし、次にルート ノードにアクセスし、最後に右側のサブツリーにアクセスします。上記のバイナリ ツリーの順序トラバーサル結果は次のようになります0 4 5 3 6 7
。
順序通りの走査シーケンスの概略図は次のとおりです。
順序トラバーサルの再帰アルゴリズムは次のように定義されます: バイナリ ツリーが空でない場合、(1)
左のサブツリーをトラバースし、(2)
ルート ノードにアクセスし、(3)
右のサブツリーをトラバースします。
プログラミング要件
このレベルのプログラミング タスクは、右側のコード スニペットの中央Begin
から中央までのEnd
コードを完成させることです。具体的な要件は次のとおりです。
- 補完
inOrder(TreeNode root)
メソッドは二分木のインオーダートラバーサル機能を実現し、ノードの値を出力します。
詳細については、後続のテストサンプルを参照してください。
- プラットフォームは、ユーザーが完成したクラスのオブジェクトを作成します
BinaryTree
。 createTree(int arr[])
オブジェクトのメソッドを呼び出し、arr
データを含むバイナリ ツリーを構築し、ルート ノードを返します。inOrder(TreeNode root)
オブジェクトのメソッドを呼び出し、インオーダートラバーサルを実行してノード値を出力し、- そしてプログラムの出力に応じてプログラムが正しいかどうかを判断します。
注: テスト入力の解釈部分は実際の入力とは異なりますが、テスト結果と実際の出力には影響しません。
このレベルに含まれるコード ファイルBinaryTree.java
のコード(順序立てて答えを得ることができますが、作成するのは簡単ではありません。報酬、ヘルプ、サポートが Xinghe に進む動機です)
package step2;
/**
* Created by zengpeng on 2018/2/12.
YJH YJH YJH 予星河
*/
public class BinaryTree {
private TreeNode root;//根节点
public BinaryTree() {
root = null;
}
public void inOrder(TreeNode root) {
/********** YJH YJH YJH 予星河 Begin *********/
if(root==null){
return;
}
inOrder(root.leftChild);
System.out.println(root.item);
inOrder(root.rightChild);
/**********YJH YJH YJH 予星河 End *********/
}
/**
* 以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
*
* @param arr
* @param n
* @return
*/
public TreeNode createTree(int arr[]) {
TreeNode tmp[] = new TreeNode[arr.length + 1];
for (int k = 1; k <= arr.length; k++) {
TreeNode node = new TreeNode(arr[k - 1]);
tmp[k] = node;
if (k == 1) {
root = node;
} else {
int j = k / 2;
if (k % 2 == 0) {
tmp[j].leftChild = node;
} else {
tmp[j].rightChild = node;
}
}
}
return root;
}
public static class TreeNode {
private TreeNode leftChild;
private TreeNode rightChild;
private int item;
public TreeNode(int item) {
this(null, null, item);
}
public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
this.leftChild = leftChild;
this.rightChild = rightChild;
this.item = item;
}
}
}
感謝: JAVA データ構造の啓発講師、タオ ホンフェイ先生
ずっと閲覧してサポートしてくれた友達に感謝します(私たちの夢とモチベーションをサポートするために作成するのは簡単ではありません )
Xingheの無尽蔵の力の源であるYJH Myselfに感謝します