トラバーサルの定義
特定の戦略によれば、バイナリツリーの各ノードは特定の順序でアクセスされるため、各ノードは1回だけアクセスされます。このプロセスは、二分木のトラバーサルと呼ばれます。
トラバーサルの結果は、バイナリツリーノードの線形シーケンスです。非線形構造の線形化。
戦略:左側の子ノードは、右側の子ノードの前にアクセスする必要があります
プレオーダー(ルート)は二分木を横断します
二分木が空の場合は戻り、そうでない場合は戻ります。
- ①ルートノードにアクセスします。
- ②最初にルートノードの左側のサブツリーをトラバースします。
- ③最初にルートノードの右側のサブツリーをトラバースします。
結果として得られる線形シーケンスは、それぞれプレオーダー(ルート)シーケンスと呼ばれます。
事前注文トラバーサルシーケンスは次のとおりです。ABDGCEF
二分木の中間(ルート)走査
二分木が空の場合は戻り、そうでない場合は戻ります。
- ①ルートノードの左側のサブツリーをトラバースするため。
- ②ルートノードにアクセスします。
- ③ルートノードの右側のサブツリーをトラバースするため。
結果として得られる線形シーケンスは、それぞれ順序(ルート)シーケンスと呼ばれます。
ミドルオーダートラバーサルシーケンスは次のとおりです。DGBAECF
二分木のポストオーダー(ルート)トラバーサル
二分木が空の場合は戻り、そうでない場合は戻ります。
- ①ルートノードの左側のサブツリーを次の順序でトラバースします。
- ②ルートノードの右側のサブツリーを次の順序でトラバースします。
- ③ルートノードにアクセスします。
結果として得られる線形シーケンスは、それぞれポストオーダー(ルート)シーケンスと呼ばれます。
ポストオーダートラバーサルシーケンスは次のとおりです。GDBEFCA
二分木の階層的(二次的)走査
二分木の最初のレベル(つまりルートノード)から始めて、レイヤーごとに上から下にトラバースします。同じレイヤーで、ノードは左から右の順序でアクセスされます。結果として得られる線形シーケンスは、それぞれシーケンスシーケンスと呼ばれます。
レイヤーシーケンストラバーサルシーケンスは次のとおりです。ABCDEFG
コード
//编写前序遍历的方法
public void preOrder() {
System.out.println(this); //先输出父结点
//递归向左子树前序遍历
if(this.left != null) {
this.left.preOrder();
}
//递归向右子树前序遍历
if(this.right != null) {
this.right.preOrder();
}
}
//中序遍历
public void infixOrder() {
//递归向左子树中序遍历
if(this.left != null) {
this.left.infixOrder();
}
//输出父结点
System.out.println(this);
//递归向右子树中序遍历
if(this.right != null) {
this.right.infixOrder();
}
}
//后序遍历
public void postOrder() {
if(this.left != null) {
this.left.postOrder();
}
if(this.right != null) {
this.right.postOrder();
}
System.out.println(this);
}