木の走査.

Slides:



Advertisements
Similar presentations
次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20
Advertisements

4章 制御の流れ-3.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造 2010年7月5日
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
16.3 関数と構造体 構造体ポインタ 地底探査ゲーム
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
アルゴリズムとデータ構造 2012年6月14日
データ構造とアルゴリズム 第7回 木 ~ データ構造(3)~.
構造体.
Stack & Queue & List 3.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
アルゴリズムとデータ構造 2011年6月14日
構造体 構造体, 構造体とポインタの組み合わせ,.
二分探索木によるサーチ.
プログラムの制御構造 選択・繰り返し.
Cプログラミング演習 中間まとめ2.
プログラミング論 ファイル入出力
東京工科大学 コンピュータサイエンス学部 亀田弘之
データ構造とアルゴリズム (第2回) ー線形構造ー.
マインスイーパの概要 マインスイーパの準備 マインスイーパの完成 マインスイーパの改良
関数の定義.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
アルゴリズムとデータ構造1 2006年7月4日
アルゴリズムとデータ構造1 2005年7月15日
二分木のメソッド(続き).
知能情報工学演習I 第12回(後半第6回) 課題の回答
アルゴリズムとデータ構造勉強会 第6回 スレッド木
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング論 ファイル入出力
二分探索木における要素削除 データ構造とプログラミング(10)
データ構造と アルゴリズム 第七回 知能情報学部 新田直也.
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
Cプログラミング演習 第10回 二分探索木.
関数への道.
プログラムの制御構造 配列・繰り返し.
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
プログラミング 4 木構造とヒープ.
疑似乱数, モンテカルロ法によるシミュレーション
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
プログラミング序論演習.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
プログラミング序論演習.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
AVL木.
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造1 2009年7月2日
さまざまなプログラミング言語, オンライン開発環境
モジュール分割.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
知能情報工学演習I 第12回( C言語第6回) 課題の回答
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
C言語講座第5回 2017 構造体.
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
プログラミング 2 静的変数.
Presentation transcript:

木の走査

木の走査法 木の走査には次の種類がある 先行順 中央順 後行順 ※レベル順(ここでは扱わないことにする)

演算木 + 5 * 3 4

先行順(考え方) ノード、左の子、右の子の順に訪れる。 数式だと、(+ 5 (* 3 4) )のように演算子が 左に来て、その後被演算子が2つ並ぶ形となる。 1 5 2 6 7 3 4

後行順(考え方) 左の子、右の子、ノードの順に訪れる。 数式だと (5 (3 4 *) +)のように被演算子が 2つ続いた後で演算子が来る形となる。 7 6 3 4 5 1 2

中央順(考え方) 左の子、ノード、右の子の順に訪れる。 数式だと 5+(3*4)のように演算子が2つの 被演算子に挟まれる形となる。 4 6 2 5 7 1 3

プログラム例(宣言部) #include <stdio.h> #include <stdlib.h> static int intarray[]={4,7,3,2,1,8,9}; #define MINTS (sizeof(intarray)/sizeof(intarray[0])) typedef struct INTTREE { int node; struct INTTREE *L,*R; }INTTREE;

プログラム例(木の作成1) INTTREE* MakeTree(int n,INTTREE* root) {//2分探索木の作成 if (root==NULL) { root=(INTTREE *)malloc(sizeof(INTTREE)); root->node=n; root->L=root->R=NULL; }

プログラム例(木の作成2) else if (n<(root->node)) root->L=MakeTree(n,root->L); else if (n>(root->node)) root->R=MakeTree(n,root->R); else return NULL; return root;

プログラム例(木の要素の表示) void printint(INTTREE* root) { while (root!=NULL) { printint(root->L); printf("% *d\n",root->node); printint(root->R); }

main関数 void main(void) { INTTREE *head=NULL; int i; int key=0; for (i=0;i<MINTS;i++) head=MakeTree(intarray[i],head); printint(head); }

実行結果

実習 前述のプログラム例を書き直して 中央順、後行順を実現するプログラム にしてください。