資料結構使用Java 第9章 樹(Tree).

Slides:



Advertisements
Similar presentations
数据结构 东北大学软件学院数据结构课程建设小组.  通过本课程的学习掌握常用数据结构的逻辑结构特 征、存储结构及相关算法及实现的原理。  学会从问题入手,分析研究计算机加工的数据结构 的特性,以便为应用所涉及的数据设计适当的逻辑 结构、存储结构及其相应的操作算法,并初步掌握 时间和空间分析技术。
Advertisements

C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
总结-图 基础知识 基本方法 2017年3月6日 西南石油大学..
第7章 樹與二元樹 (Trees and Binary Trees)
Chapter 06 Tree and binary tree 第六章 树和二叉树
動畫與遊戲設計 Data structure and artificial intelligent
四資二甲 第三週作業 物件導向程式設計.
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
计算机软件技术基础 数据结构与算法(4).
数据结构——树和二叉树 1/96.
引入树 线性表、堆栈和队列都是线性结构,它们的共同特点:一对一; 计算机对弈中的一个格局可能有多个后继格局,用线性结构难以描述。
第六章 树和二叉树.
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
CH6 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
数据结构 第6章 树和二叉树 什么是树和二叉树?? 二叉树的遍历 数据结构.
§4 Additional Binary Tree Operations
第六章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用.
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chapter 5 Tree & Binary Tree
Chap5 Graph.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
Chapter8 Binary and Other Trees
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
数 据 结 构 Ch.6 树 计 算 机 学 院 肖明军
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
哈夫曼编码.
Chapter 5 樹(Trees).
第12章 樹狀搜尋結構 (Search Trees)
第六章 二叉树和树 6.1树的基本概念 6.2二叉树 6.3二叉树遍历 6.4线索二叉树 6.5树和森林 6.6树的应用(霍夫曼树及其编码)
第十一章 Heap 結構.
第六章 树和二叉树.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
第7章 树和二叉树 7.1 树 7.2 二叉树 7.3 以结点类为基础的二叉树设计 7.4 二叉树类 7.5 二叉树的分步遍历
Data Structure.
二叉树和其他树 (Binary and other trees)
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
C/C++/Java 哪些值不是头等程序对象
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
Tree & Binary Tree.
書名 Java於資料結構與演算法之實習應用
第6章 树和二叉树 本章主题:树、二叉树 教学目的:掌握树和二叉树的类型定义、运算及存储结构 教学重点:树的各种表示、各种存储方式和运算,
二叉树的遍历.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
第六章 树和二叉树 £6.1 树 £6.2 二叉树 £6. 3 二叉树的存储结构 £6.4 二叉树的遍历与线索化 £6.1.1 树的定义
第六章 树和二叉树 学习要点 理解树的定义和基本术语,重点了解二叉树的定义、性质、存储结构; 掌握二叉树遍历的递归算法及它的典型运算;
第7章 樹與二元樹(Trees and Binary Trees)
Ch.9 查找 §9.1 基本概念 查找和排序是两个重要的运算
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
Chapter 6 樹狀結構.
106二專班第二次作業 2017/11/27.
树和二叉树(一).
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
辅导课程十一.
void HeapSort(int *a, int n) //堆排序 { //建立堆 for(int i = n/2-1; i >= 0; i--) //非叶节点最大序号值为n/2 HeapAdjust(a, i, n); for(int j = n-1; j >
方格紙上畫正方形.
Data Structure.
第10章 二元搜尋樹 (Binary Search Tree)
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
JAVA 程式設計與資料結構 第十七章 Tree.
JAVA 程式設計與資料結構 第二十一章 Graph.
Presentation transcript:

資料結構使用Java 第9章 樹(Tree)

課程內容 樹(Tree)的特色與特性。 一般樹的基本結構與定義。 二元樹的定義與種類 節點程式碼 二元樹程式碼撰寫 二元樹追蹤

樹的基本結構與特性 陣列、鏈結串列、堆疊與佇列都屬於線性的 (linear)資料結構。 有些應用的資料展現的並不是這種線性的結構, 需要用到像樹(tree)或圖型(graph)這一類非線性 的(nonlinear)資料結構。

一般樹的基本結構 大自然中的樹(tree)是一種有起源和分支的結構, 由樹根、樹葉與枝幹所組成。

一般樹(general tree)的基本定義 樹是一種由節點(node)連結而成的有限集合。 至少具有一個稱為樹根(root)的節點,因此一般 的樹不會是空集合。 具有下列兩個性質的圖形(graph) 相連結(connected): 節點之間至少必須有一個以上的連結。 非迴圈性(circuit-free): 點與點之間不能形成無出口的迴圈。

樹的特徵

樹的基本定義 樹為非線性之資料結構,資料與資料之間藉由分 支(Branch)組成階層式(Hierarchical)之關係。 樹狀結構為一個或多個節點所構成之有限集合, 並具有以下之特性: 有一個特定節點稱為樹根 (Root) 其餘節點為分成n個獨立之集合T1,T2,…Tn 其中各個集合為一樹狀結構 T1,T2,…,Tn稱為樹根(Root)之子樹(Sub-tree)

典型的樹狀結構

一般樹的特性

二元樹 Binary Tree

二元樹(Binary Tree) 是一個由有限個節點所組成的集合 可能是空集合,或者是由一個樹根及兩個互斥的 二元樹稱為左子樹和右子樹所構成 又稱為Knuth樹,每個節點的分支度≦2 左邊的節點稱為左子樹(Left Child) 右邊的節點稱為右子樹(Right Child) 因其左右有次序之分,故又稱為有序樹(Ordered Tree)。

節點結構 每個節點的結構如下: 優點:插入與刪除一個節點相當容易。 缺點:很難找到該節點的父點(Parent)。 其中DATA欄存放節點值。 left欄存放其左子樹的節點物件 right欄存放其右子樹的節點物件。 優點:插入與刪除一個節點相當容易。 缺點:很難找到該節點的父點(Parent)。 LCHILD DATA RCHILD

節點程式碼 其節點類別可定義如下: 可使用建構元傳入資料,進行節點初始化 class treeNode{ int data; treeNode left, right; public treeNode(int value){ data = value; left = right = null; }

二元樹種類 歪斜樹(Skewed Binary Tree): 當一個二元樹的所有節點都只有左子點(Left Child) 或只有右子點時稱之。 完滿二元樹(Full Binary Tree): 一個二元樹含有的節點數最多時稱之,若階度 (level)為k且含有2k-1個節點。

二元樹種類 完整二元樹(Complete Binary Tree): 一個二元樹的階度(level)為k,而其所含節點數少 於2k-1個,但其節點的編號順序如同完滿二元樹 一般時稱之。 嚴格二元樹(Strictly Binary Tree): 若二元樹的每一個非終端節點均有非空的左右子 樹時稱之。

普通二元樹程式撰寫 利用節點陣列儲存使用者輸入的資料。 node[0] node[1] node[2] node[3] node[4] 10 left right 59 left right 36 left right 8 left right 24 left right 77 left right

普通二元樹程式撰寫 將節點陣列按照順序串成二元樹 node[0] 10 node[2] node[1] 59 36 null node[3] 8 null 24 null 77 null

普通二元樹程式撰寫 節點由陣列後面往前串(避免存取錯誤) 若陣列索引值為偶數n 若陣列索引值為奇數n 代表為右節點 node[i/2-1].right = node[i]; 若陣列索引值為奇數n 代表為左節點 其父節點索引值為:(n/2) node[i/2].left = node[i];

二元樹的追蹤 Binary TreeTraversals

二元樹的追蹤 前序(Preorder): 中序(Inorder) : 後序(Postorder): 樹根→左子樹→右子樹(DLR) 左子樹→樹根→右子樹(LDR) 後序(Postorder): 左子樹→右子樹→樹根(LRD)

前序式走訪(遞迴演算法) 若樹根節點不為空節點,則執行下列步驟: 1.走訪樹根 2.走訪左子樹(遞迴) 3.走訪右子樹(遞迴) 若樹根節點不為空節點,則執行下列步驟: 1.走訪樹根 2.走訪左子樹(遞迴) 3.走訪右子樹(遞迴) public void preOrder(){ System.out.print(data+" "); if(left!=null) left.preOrder(); if(right!=null) right.preOrder(); }