データ構造とアルゴリズム7

Download Report

Transcript データ構造とアルゴリズム7

データ構造と
アルゴリズム
第七回
理工学部
情報システム工学科
新田直也
二分木

二分木: すべての節点が子をたかだか2つしか持
たない順序木.
(a + b) * c + (d / -e)
+
子が2個
/
*
+
a
c
b
d
子が2個
-
子が1個
e
子が0個
二分木の表現(1)

例によってWebで...
二分木の表現(2)
struct node {
char value;
struct node *left;
struct node *right;
}
ラベル
左の子のアドレス
右の子のアドレス
1ノードに相当
(構造体)
二分木の巡回法
木の巡回(traverse):各節を1回づつ全節を調べる.
 深さ優先探索法と幅優先探索法に分類される.

+
+
/
*
+
a
c
d
b
深さ優先探索
/
*
-
e
+
a
c
d
b
e
幅優先探索
深さ優先探索の種類

行きがけ順,帰りがけ順,通りがけ順の3通り.



行きがけ順: 親 → (左部分木) → (右部分木)
帰りがけ順: (左部分木) → (右部分木) → 親
通りがけ順: (左部分木) → 親 → (右部分木)
+
/
*
+
a
c
b
d
-
e
行きがけ順

行きがけ順: 親 → (左部分木) → (右部分木)
(1)
+
(2)
(3)
(2-1)
(2-2)(2-2-1)
(2-2-2)
/
*
(2-3)
+
c
d
-
(2-2-3)
a
b
e
→処理順は +*+abc/d-e
帰りがけ順

帰りがけ順: (左部分木) → (右部分木) → 親
(3)
+
(1)
(2)
(1-3)
(1-1)(1-1-3)
(1-1-1)
/
*
(1-2)
+
c
d
-
(1-1-2)
a
b
e
→処理順は ab+c*de-/+
通りがけ順

通りがけ順: (左部分木) → 親 → (右部分木)
(2)
+
(1)
(3)
(1-2)
(1-1)(1-1-2)
(1-1-1)
/
*
(1-3)
+
c
d
-
(1-1-3)
a
b
e
→処理順は a+b*c+d/e-
アルゴリズムの記述

手続き的に行きがけ順を記述すると…
木の根をnとする
スタックを空にする
節nを調べる
nが葉か?
no
yes
スタックが
空か?
no
nの右部分木を
スタックに積む
スタックから
木tを取り出す
nの左部分木
の根をnとする
木tの根を
nとする
yes
End
再帰アルゴリズムによる記述

再帰アルゴリズムだとシンプルに記述できる.
void traverse(struct node *n) {
[n に対して処理]
if (n->left != NULL) traverse(n->left);
if (n->right != NULL) traverse(n->right);
return;
}
再帰アルゴリズムの動作
void traverse(struct node *n) {
[n に対して処理]
if (n->left != NULL) traverse(n->left);
if (n->right != NULL) traverse(n->right);
return;
}
void traverse(struct node *n) {
[n に対して処理]
if (n->left != NULL) traverse(n->left);
if (n->right != NULL) traverse(n->right);
return;
}
void traverse(struct node *n) {
[n に対して処理]
if (n->left != NULL) traverse(n->left);
if (n->right != NULL) traverse(n->right);
return;
}
void traverse(struct node *n) {
[n に対して処理]
if (n->left != NULL) traverse(n->left);
if (n->right != NULL) traverse(n->right);
return;
}
+
/
*
+
a
b
c
d
e
順序木の表現(1)
順序木の表現(2)
struct node {
char value;
struct node *sibling;
struct node *chlid;
}
ラベル
兄弟のアドレス
子供のアドレス
1ノードに相当
(構造体)
順序木と二分木

順序木を二分木とみなすことができる.
f
g
a
f
b
a h a
f
h
b
g
a
f
b
a
h
h
b
b
b
a