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

Slides:



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

第7章 樹與二元樹 (Trees and Binary Trees)
資料結構 老師:李崇明 助教:楊斯竣.
Tree (2): heap, deap, 2-3 tree, 2-3-4tree
演算法 陣列 鏈結串列 堆疊與佇列 樹狀結構 搜尋
資料結構(計財系).
Chapter 6 樹狀結構.
新世代計算機概論 第15章 資料結構.
課程名稱:計算機概論 授課老師:李春雄 博士
Chapter 5 樹狀結構.
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
计算机软件技术基础 数据结构与算法(4).
引入树 线性表、堆栈和队列都是线性结构,它们的共同特点:一对一; 计算机对弈中的一个格局可能有多个后继格局,用线性结构难以描述。
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
CH6 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
資料結構 第3章 鏈結串列.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
Chapter8 Binary and Other Trees
第11章 資料結構 – 使用C語言的模組 11-1 資料結構的基礎 11-2 C語言的模組化程式設計 11-3 基本鏈結串列
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
第7章 樹與二元樹 (Trees and Binary Trees)
Course 0 課程介紹 Introduction
樹狀結構 Trees.
第12章 樹狀搜尋結構 (Search Trees)
資料結構 第6章 樹狀結構.
類別(class) 類別class與物件object.
(Circular Linked Lists)
第六章 树和二叉树.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
資料結構–樹(Tree) 綠園.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
鄧姚文 資料結構 第六章:樹(Tree) 鄧姚文
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
Java 程式設計 講師:FrankLin.
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Chap3 Linked List 鏈結串列.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
Ch 3 Dynamic Programming (動態規劃).
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
Chap4 Tree.
Tree & Binary Tree.
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++
第7章 樹與二元樹(Trees and Binary Trees)
資料結構與C++程式設計進階 樹狀結構(Tree) 講師:林業峻 CSIE, NTU 11/ 12, 2009.
第 八 章 高等樹 課程名稱:資料結構 授課老師:________ 2019/4/28.
資料結構使用Java 第9章 樹(Tree).
106二專班第二次作業 2017/11/27.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
資料結構使用Java 第6章 鏈結串列(Linked List).
陣列與結構.
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
6.1 樹狀結構的一些專有名詞 6.2 二元樹 6.3 二元樹的表示方法 6.4 二元樹的追蹤 6.5 引線二元樹 6.6 其它議題
第7章 資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
資料結構使用Java 第5章 串列程式實作.
Trees 授課者:驕芸.
第10章 二元搜尋樹 (Binary Search Tree)
JAVA 程式設計與資料結構 第十七章 Tree.
InputStreamReader Console Scanner
資料結構 Data Structure (資管二)
Presentation transcript:

資料結構使用Java 樹(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

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

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

二元樹儲存於陣列中的格式 btree[ ] A B C D E F G

普通二元樹程式撰寫 節點由陣列後面往前串(避免存取錯誤) 父節點階層編號 : level 左節點是父節點編號乘以2 右節點是父節點編號乘以2 level = level * 2 ; 右節點是父節點編號乘以2 level = level * 2 + 1;

創建二元樹步驟 建立二元樹 函數createBTree()讀取一維陣列的元素來建立二元樹。 將陣列元素值與二元樹的節點做比較 如果元素值大於節點值,將元素值插入為右子節點,如果 右子節點不是空的,重複比較節點值,直到找到可插入位 置。 如果元素值小於節點值,將元素值插入為左子節點,如果 左子節點不是空的,重複比較節點值,直到找到可插入位 置。

例如 : 讀取一維陣列值依序為 : 5 6 4 8 2 3 7 1 9,依據上 述規則建立二元樹。 樹根 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 btree[ ]

二元樹的追蹤 Binary TreeTraversals

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

二元樹的追蹤 前序(Pre-order) 中序(In-order) 後序(Post-order) 訪問根節點 訪問左子樹 訪問右子樹 上圖的走訪順序為:ABDECFG 中序(In-order) 上圖的走訪順序為:DBEAFCG 後序(Post-order) 上圖的走訪順序為:DEBFGCA

二元樹的追蹤 前序(Pre-order) 中序(In-order) 後序(Post-order) 訪問根節點 訪問左子樹 訪問右子樹 上圖的走訪順序為:5 4 2 1 3 6 8 7 9 中序(In-order) 上圖的走訪順序為:1 2 3 4 5 6 7 8 9 後序(Post-order) 上圖的走訪順序為:1 3 2 4 7 9 8 6 5

二元樹走訪程式流程 中序走訪方式 Step1 : Step2 : 檢查是否可以繼續前進,指標不可大於陣列的最大值 如果可以前進,其處理方式如下 (1) 遞迴呼叫 inOrder(i*2) 向左走 (2) 顯示目前節點資料 (3) 遞迴呼叫 inOrder(i*2+1) 向右走

二元樹走訪程式流程 前序走訪方式 Step1 : Step2 : 檢查是否可以繼續前進,指標不可大於陣列的最大值 如果可以前進,其處理方式如下 (1) 顯示目前節點資料 (2) 遞迴呼叫 inOrder(i*2) 向左走 (3) 遞迴呼叫 inOrder(i*2+1) 向右走

二元樹走訪程式流程 後序走訪方式 Step1 : Step2 : 檢查是否可以繼續前進,指標不可大於陣列的最大值 如果可以前進,其處理方式如下 (1) 遞迴呼叫 inOrder(i*2) 向左走 (2) 遞迴呼叫 inOrder(i*2+1) 向右走 (3) 顯示目前節點資料

前序式走訪(遞迴演算法) 若樹根節點不為空節點,則執行下列步驟: 1.走訪樹根 2.走訪左子樹(遞迴) 3.走訪右子樹(遞迴) 若樹根節點不為空節點,則執行下列步驟: 1.走訪樹根 2.走訪左子樹(遞迴) 3.走訪右子樹(遞迴) public void preOrder(){ if(i<MAX_NODE){ if(btree[i]!=0) System.out.print(btree[i]); preorder(i*2); preorder(i*2+1); }