二分木のメソッド(続き).

Slides:



Advertisements
Similar presentations
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Advertisements

データ構造とプログラミング技 法 (第3回) ー木構造ー. 木構造 (1) 根( root )と呼ばれる節 R が、 1 つだけ含まれ る。 R … TmTm T1T1 木構造: 1 個以上の節の有限集合 T であり、 次の二つの条件を満足するもの (2) 根以外の節は、 m (≧ 0 )個の互いに素な部.
基本情報技術概論 I 演習(第5回) 埼玉大学 理工学研究科 堀山 貴史
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
アルゴリズムとデータ構造 第8回 ソート(3).
アルゴリズムとデータ構造 2013年6月18日
アルゴリズムとデータ構造1 2005年7月8日
Ex7. Search for Vacuum Problem
アルゴリズムとデータ構造 2010年7月5日
Ex8. Search for Vacuum Problem(2)
On the Enumeration of Colored Trees
アルゴリズムとデータ構造 第2章 リスト構造 5月17日分
Problem G : Entangled Tree
最適化ソルバーのための Python言語入門
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 2012年6月14日
データ構造とアルゴリズム 第7回 木 ~ データ構造(3)~.
Ruby勉強会(第1回) 2006/06/29 竹内豪.
情報工学概論 (アルゴリズムとデータ構造)
大岩 元 慶応大学環境情報学部 二分木 データ構造とプログラミング(10) 大岩 元 慶応大学環境情報学部
アルゴリズムとデータ構造 2011年6月14日
ピカチュウによる オブジェクト指向入門 (新版)
アルゴリズムとデータ構造 第7回探索のためのデータ構造(1) 2015/11/18 アルゴリズムとデータ構造 2015.
二分探索木によるサーチ.
7-3.高度な木 (平衡木) AVL木 平衡2分木。回転操作に基づくバランス回復機構により平衡を保つ。 B木
Cプログラミング演習 中間まとめ2.
アルゴリズムとデータ構造 2012年6月28日
アルゴリズムとデータ構造 2011年6月27日
アルゴリズムとデータ構造1 2006年7月4日
1 T 行きがけ順: A B D F I J C G H 通りがけ順: D B I F J A G C H
アルゴリズムとデータ構造1 2006年6月16日
2011/06/21 情報知能学科「アルゴリズムとデータ構造」 担当:白井英俊
木の走査.
アルゴリズムとデータ構造勉強会 第6回 スレッド木
二分探索木における要素削除 データ構造とプログラミング(10)
データ構造とアルゴリズム (第3回) ー木構造ー.
アルゴリズムとデータ構造 第3章 ヒープ 6月10日分
第9回 優先度つき待ち行列,ヒープ,二分探索木
データ構造と アルゴリズム 第七回 知能情報学部 新田直也.
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
離散数学 07. 木 五島.
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
Cプログラミング演習 第10回 二分探索木.
復習+α JBuilderの使い方を思い出す。 配列とGUI 再帰とマージソート 木と二分木の探索
アルゴリズムとデータ構造 2010年7月26日
Ex7. Search for Vacuum Problem
プログラミング 4 木構造とヒープ.
アルゴリズムとデータ構造 2011年7月8日課題の復習
アルゴリズムとデータ構造 第2章 リスト構造 5月20日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
情報知能学科「アルゴリズムとデータ構造」
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
AVL木.
第9回 優先度つき待ち行列,ヒープ,二分探索木
アルゴリズムからプログラムへ GRAPH-SEARCH
アルゴリズムとデータ構造 2012年7月2日
アルゴリズムとデータ構造1 2008年7月24日
アルゴリズムとデータ構造 2011年6月28日
アルゴリズムとデータ構造 2011年6月16日
アルゴリズムとデータ構造 2013年7月1日
基本情報技術概論(第6回) 埼玉大学 理工学研究科 堀山 貴史
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造1 2009年7月2日
アルゴリズムとデータ構造 2013年7月2日
アルゴリズムとデータ構造 第2章 リスト構造 5月24日分
ヒープソート.
ヒープソート.
アルゴリズムとデータ構造 2013年6月20日
7.木構造 7-1.データ構造としての木 7-2.2分探索木 7-3.高度な木.
Presentation transcript:

二分木のメソッド(続き)

中間順に木をなぞるメソッド class Vertex def initialize …   attr_attribute :data, :left, :right def inorder # 中間順でなぞる    @left.inorder if @left != nil   # vの左の子をなぞる print @data # 頂点のラベルを表示 @right.inorder if @right != nil # vの右の子をなぞる end # def of inorder end # class

先行順、後行順に木をなぞるメソッド class Vertex def initialize …   attr_attribute :data, :left, :right def       # 中間順でなぞる    @left.inorder if @left != nil   # vの左の子をなぞる print @data # 頂点のラベルを表示 @right.inorder if @right != nil # vの右の子をなぞる end # def preorder postorder inorder 後行 先行 @left.preorder if @left != nil   # vの左の子をなぞる @left.postorder if @left != nil   # vの左の子をなぞる print @data # 頂点のラベルを表示 @right.postoder if @right != nil # vの右の子をなぞる @right.preorder if @right != nil  # vの右の子をなぞる end # class

「高さ」を返すメソッド この木の高さは? 左部分木の高さ と 右部分木の高さ の大きい方+1 左部分木の高さ= @left.height 左部分木の高さ と 右部分木の高さ    の大きい方+1 左部分木の高さ= @left.height 右部分木の高さ= @left.height ただし子がいない時も考慮すること (例えば両方とも子がいない=葉の場合は、高さ0!)

考えるべきケース 子ノードがない場合: これは高さ 0 左(または右)の子ノードだけがある場合 両方の子がある場合 子ノードを根とする 子ノードがない場合:                                             これは高さ 0 左(または右)の子ノードだけがある場合 両方の子がある場合 子ノードを根とする 部分木の高さ+1 左子ノードを根とする部分木の高さ 右子ノードを根とする部分木の高さ   の大きいほう+1 (前のスライド参照)

「高さ」を返すメソッド(続) class Vertex def initialize …   attr_attribute :data, :left, :right def height if (@left != nil) # 左の子あり leftHeight = @left.height elsif (@right != nil) # 左の子なし、右の子あり return 1+@right.height else # 左の子も右の子もなし return 0 # 葉 end # if --- 左の子がある場合のみ残る if (@right != nil) # 右の子あり rightHeight = @right.height else # 右の子なし return 1+leftHight end # if --- 二つの子あり if (leftHeight > rightHeight) return 1+leftHeight else return 1+rightHeight end # if end # def end # class

葉を表示するメソッド class Vertex def initialize …   attr_attribute :data, :left, :right def inorder # 中間順でなぞる    @left.inorder if @left != nil   # vの左の子をなぞる print @data # 頂点のラベルを表示 @right.inorder if @right != nil # vの右の子をなぞる end # def of inorder このままだと「葉」以外の頂点も表示 そこで「葉」の条件を加えれば良い end # class それは、子頂点がないこと! print @data if (@left == nil) && (@right == nil) 注意:showが返す「配列」から求めても良いが、Vertexクラスのメソッドにならない