Chap4 Tree.

Slides:



Advertisements
Similar presentations
1 第八章 深入探討樹狀結構. 2 目次 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答.
Advertisements

Author : Hyesook Lim, Changhoon Yim, and Earl E. Swartzlander, Jr., Fellow Publisher : IEEE TRANSACTIONS ON COMPUTERS, VOL. 59, NO. 6, JUNE 2010 Presenter.
基本概論 Basic concepts.
第7章 樹與二元樹 (Trees and Binary Trees)
資料結構 老師:李崇明 助教:楊斯竣.
Tree (2): heap, deap, 2-3 tree, 2-3-4tree
資料結構(計財系).
Chapter 06 Tree and binary tree 第六章 树和二叉树
Chapter 6 樹狀結構.
Chapter 5 樹狀結構.
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
第三章 鏈結串列 Linked List.
计算机软件技术基础 数据结构与算法(4).
引入树 线性表、堆栈和队列都是线性结构,它们的共同特点:一对一; 计算机对弈中的一个格局可能有多个后继格局,用线性结构难以描述。
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
§4 Additional Binary Tree Operations
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chap5 Graph.
Chapter 5 Tree & Binary Tree
Chap5 Graph.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
第11章 查找 主要知识点 查找的基本概念 静态查找表 动态查找表 哈希表.
Chapter8 Binary and Other Trees
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
第7章 樹與二元樹 (Trees and Binary Trees)
樹狀結構 Trees.
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
哈夫曼编码.
Chapter 5 樹(Trees).
第12章 樹狀搜尋結構 (Search Trees)
資料結構 第6章 樹狀結構.
演算法與資料結構 製作單位: 高雄市立高雄中學.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第六章 树和二叉树.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
資料結構–樹(Tree) 綠園.
鄧姚文 資料結構 第六章:樹(Tree) 鄧姚文
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Data Structure.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
二叉树和其他树 (Binary and other trees)
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
資料結構 第4章 堆疊.
Ch 3 Dynamic Programming (動態規劃).
樹 2 Michael Tsai 2013/3/26.
2-3-4 Tree and how it relates to Red Black Tree
感謝同學們在加分題建議. 我會好好研讀+反省~
B+ Tree.
Tree & Binary Tree.
二叉树的遍历.
資料結構使用Java 樹(Tree).
Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++
第7章 樹與二元樹(Trees and Binary Trees)
資料結構與C++程式設計進階 樹狀結構(Tree) 講師:林業峻 CSIE, NTU 11/ 12, 2009.
資料結構使用Java 第9章 樹(Tree).
Chapter 6 樹狀結構.
106二專班第二次作業 2017/11/27.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
進階資料結構(2) Disjoint Sets
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
6.1 樹狀結構的一些專有名詞 6.2 二元樹 6.3 二元樹的表示方法 6.4 二元樹的追蹤 6.5 引線二元樹 6.6 其它議題
Data Structure.
Trees 授課者:驕芸.
第10章 二元搜尋樹 (Binary Search Tree)
JAVA 程式設計與資料結構 第十七章 Tree.
Presentation transcript:

Chap4 Tree

Tree 「樹」(tree)是由一個或一個以上的節點(node)組成 有一個特殊的節點稱為「節點」(root) (一定要有的 ) 其餘的節點分為  n  ≧  0個不同的集合,T1,T2,T3,...Tn,則每一個集合稱它的子樹

Tree

Tree 分支度(degree):每個節點所有的子樹個數。例如像B的分支度為 2, D的分支度為3,F、K、I、J…等為0。 樹的分支度(degree of a tree):樹中所有節點的最大分支度。節點中最大分支度為3,所以樹的分支度也為3。 樹葉(Leaf)或稱終端節點(terminal nodes):分支度為零的節點。 非終端節點(nonterminal nodes):樹葉以外的節點。 如A、B、C、D、E、H等。 子點(Child):某節點所有子樹的樹根。例如:A的子點為B、C、D,B的子點為E、F。 父點(Parent):若X節點為Y節點的子點,則Y節點為X節點的父點。例如:B的父點為A,G的父點為C。

Tree 兄弟(Brother):同一個父點的所有子點互稱兄弟。例如:B、C、D為兄弟,H、J、I也為兄弟。 階度(level):令樹根的階度1,若某節點的階度為L,則其子點的階度為L+1。 例如:K位於階度4,E、F、G、H、I、J位於階度3。 高度(height):樹的最大階度。例如:上圖樹的高度為4 樹林(Forest) :是由n個互斥樹(disjoint trees)所組合成的,移去樹根即為樹林。

Binary Tree 二元樹 Binary Tree 二元樹是一棵空樹(Empty Tree)或是由一個樹以及兩個互相階離(disjoint trees)的二元樹(稱為左子樹(Left child tree)和右子樹(Right child tree))所組成。 Binary Tree又稱為有序樹(Ordered  Tree) 二元樹可以是空集合,而非空集合的樹至少要有一個樹根(Root)。

Binary  Tree

Samples of Trees Complete Binary Tree A A A 1 B B 2 B C C Skewed Binary Tree 3 D E F G D 4 H I E 5

Binary Tree 二元樹的特性如下: 第 i 階層的總節點數小於等於 2^i - 1, i ≧ 1。 二元樹的節點總數少於2^k, k 為二元樹的深度,k ≧ 1。 樹葉節點總數等於分支度為 2 的節點總數加  1 。

二元樹的建立 二元搜尋樹(Binary search tree)採用遞迴定義 Binary search tree為二元樹,具下列性質: 左子樹節點的值小於(≦)根節點的值。 右子樹節點的值大於(≧)根節點的值。 左、右子樹仍為二元搜尋樹。

二元樹的建立 二元搜尋樹採用遞迴建立 演算法如下: 找到正確的位置,建立一節點,其左右子樹皆為空樹,再將此節點插入此二元搜尋樹。 若輸入值小於節點值,則遞迴呼叫建立二元搜尋樹的程序,繼續往左子樹建樹。 若輸入值大於節點值,則遞迴呼叫建立二元搜尋樹的程序,往右子樹建樹。

Insert Node in Binary Search Tree 30 30 30 40 40 5 40 5 5 2 80 2 35 80 2 Insert 80 Insert 35

Sequential Representation [1] [2] [3] [4] [5] [6] [7] [8] [9] A B C D E F G H I (1) waste space (2) insertion/deletion problem A [1] [2] [3] [4] [5] [6] [7] [8] [9] . [16] A B -- C D . E B A C B C D D E F G E H I

Linked Representation typedef struct node *tree_pointer; typedef struct node { int data; tree_pointer left_child, right_child; }; data left_child data right_child left_child right_child

node structure left_child data value right_child typedef emun {not, and, or, true, false } logical; typedef struct node *tree_pointer; typedef struct node { tree_pointer list_child; logical data; short int value; tree_pointer right_child; } ;

Binary Tree Traversal 二元樹追蹤(Binary Tree Traversal) 二元樹的追蹤系利用某種順序,到二元樹的每個節點(Node)去拜訪一次,也就將二元樹化為線性關係。 前序追蹤(Preorder  Traversal,  depth - first  order,  NLR) 拜訪樹根 用前序追蹤左子樹 用前序追蹤右子樹

Binary Tree Traversal + inorder traversal A / B * C * D + E infix expression preorder traversal + * * / A B C D E prefix expression postorder traversal A B / C * D * E + postfix expression level order traversal + * E * D / C A B * E * D / C A B

Binary Tree Traversal 中序追蹤 (Inorder Traversal, symmetric order, LRN) 用中序追蹤左子樹 拜訪樹根 用中序追蹤右子樹 後序追蹤(Postorder  Traversal,  LRN) 用後序追蹤左子樹 用後序追蹤右子樹

Inorder Traversal (recursive version) void inorder(tree_pointer ptr) /* inorder tree traversal */ { if (ptr) { inorder(ptr->left_child); printf(“%d”, ptr->data); indorder(ptr->right_child); } A / B * C * D + E

Preorder Traversal (recursive version) void preorder(tree_pointer ptr) /* preorder tree traversal */ { if (ptr) { printf(“%d”, ptr->data); preorder(ptr->left_child); predorder(ptr->right_child); } + * * / A B C D E

Postorder Traversal (recursive version) void postorder(tree_pointer ptr) /* postorder tree traversal */ { if (ptr) { postorder(ptr->left_child); postdorder(ptr->right_child); printf(“%d”, ptr->data); } A B / C * D * E +

樹林(Forest) A forest is a set of n >= 0 disjoint trees A Forest G A B E F H I B C D C F G D H I