Chap4 Tree.

Slides:



Advertisements
Similar presentations
基本概論 Basic concepts.
Advertisements

算法分析(3) 重要的数据结构.
总结-图 基础知识 基本方法 2017年3月6日 西南石油大学..
第7章 樹與二元樹 (Trees and Binary Trees)
Chapter 06 Tree and binary tree 第六章 树和二叉树
動畫與遊戲設計 Data structure and artificial intelligent
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
第三章 鏈結串列 Linked List.
计算机软件技术基础 数据结构与算法(4).
引入树 线性表、堆栈和队列都是线性结构,它们的共同特点:一对一; 计算机对弈中的一个格局可能有多个后继格局,用线性结构难以描述。
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
Minimum Spanning Trees
§4 Additional Binary Tree Operations
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chap5 Graph.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
Chapter 5 Tree & Binary Tree
Chap5 Graph.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
第11章 查找 主要知识点 查找的基本概念 静态查找表 动态查找表 哈希表.
資料結構簡介.
Chapter8 Binary and Other Trees
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
Chap 3 堆疊與佇列 Stack and Queue.
Chapter 6 Graph Chang Chi-Chung
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
哈夫曼编码.
Chapter 5 樹(Trees).
第12章 樹狀搜尋結構 (Search Trees)
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
第十一章 Heap 結構.
演算法與資料結構 製作單位: 高雄市立高雄中學.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第六章 树和二叉树.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Data Structure.
二叉树和其他树 (Binary and other trees)
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
資料結構 第4章 堆疊.
樹 2 Michael Tsai 2013/3/26.
2-3-4 Tree and how it relates to Red Black Tree
感謝同學們在加分題建議. 我會好好研讀+反省~
B+ Tree.
Chap4 Tree.
Tree & Binary Tree.
書名 Java於資料結構與演算法之實習應用
二叉树的遍历.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
第六章 树和二叉树 £6.1 树 £6.2 二叉树 £6. 3 二叉树的存储结构 £6.4 二叉树的遍历与线索化 £6.1.1 树的定义
第7章 樹與二元樹(Trees and Binary Trees)
Chap2 Stack & Queue.
資料結構使用Java 第9章 樹(Tree).
Chapter 6 樹狀結構.
106二專班第二次作業 2017/11/27.
Disjoint Sets Michael Tsai 2013/05/14.
進階資料結構(2) Disjoint Sets
唐常杰 四川大学计算机学院 计算机科学技术系
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Data Structure.
第10章 二元搜尋樹 (Binary Search Tree)
JAVA 程式設計與資料結構 第十七章 Tree.
JAVA 程式設計與資料結構 第二十一章 Graph.
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