PowerPoint Presentation

Similar documents
Tree

PowerPoint Presentation

Microsoft PowerPoint - tree

1

陣列與鏈結串列 Array and Linked List

Stack, queue, 運算式解析 二元樹與走訪 圖的 DFS 與 BFS 拓撲排序演算法 尤拉迴路 Uva 514, 樹狀結構 Day5: 資料結構基礎 07/12 樹 (tree) 是一種特殊的資料結構, 它可以用來描述有分支的結構, 是由一個或一個以上的節點所組成的有限集合,

Microsoft PowerPoint - C_Structure.ppt

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

投影片 1

PowerPoint Presentation

Microsoft PowerPoint - DS&Algorithm [相容模式]

Microsoft PowerPoint - 資料結構總複習

資料結構之C語言重點複習

Microsoft PowerPoint Training-1 (graph theory).pptx

資料結構與演算法複習試題(出自:全國資訊競賽89, 91、IOI 2002, 2003)


壹 前言 一 研究動機 由於我是全國商業類技藝競賽程式設計職種的選手之一, 因此有機會參與程式設計類的研習, 在一次由三重商工林易民老師主講的研習中, 他提到 二元樹拜訪 給定前序 中序轉後序 相當有挑戰性, 當時聽到這個題目就試著解題 林易民老師提到一般傳統解此題的演算法是以 先重建二元樹 再以後

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

Excel VBA Excel Visual Basic for Application

<5B BECBB0EDB8AEC1F25D312D34B0AD5FC3E2BCAEBCF6BEF7C0DAB7E F31702E504446>

Strings

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

Microsoft Word - ACL chapter02-5ed.docx

CC213

C 1


untitled

Microsoft Word - 051KK170AP009ZP01資構.docx

碩命題橫式

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

204 */ InitiateStack s ; /* s */ i = n; t = p = new node; /* */ p->data = postorder[i]; while i > q = new node; if parent[i - ] == postorder[i] S,T S

C/C++ - 文件IO

系 ( 類 ) 別部別及年級 科一屹資訊工程系 日間部 進修部 B 年級 資料結構 若一演算法的執行時間不因輸入量的多寡而有所變動 何者? (A) 0(1) (B) 0(e) (C)O(Ioge) (B ) 以上皆非 總分 : 200 分 第 2 頁共 5 頁 亦即其執行時間因定不變者係為下列 16

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

2007 CS Part 05: (ONO, Kouichi)

Microsoft Word - K33資料結構_題+解+評OK_.doc

Microsoft PowerPoint - Application of Classical Trees.pptx

<4D F736F F D B0EAA677A7BDAF53A6D2A4ADB5A52DAD70BAE2BEF7A46AB74E>

untitled

龍華科技大學數位典藏論文

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

MergedFile

1

C/C++ - 函数

什么是函数式编程?

<4D F736F F D20B8EAB054B0F2A5BBAFE0A44F>

Microsoft PowerPoint - chapter5part2.pptx

代號 :6807 頁次 : 年公務人員特種考試警察人員 一般警察人員考試及 108 年特種考試交通事業鐵路人員 退除役軍人轉任公務人員考試試題 考試別 : 鐵路人員考試等別 : 員級考試類科別 : 電子工程科目 : 計算機概要考試時間 : 1 小時座號 : 注意 : 本試題為單一選擇題

2010 作戰流程圖 上學期主線任務 ( 北市, 全國是去年日期地點 ) 時間比賽戰場說明 09/20 資訊科校內賽建中電教約選 20 名進入培訓 11/20 北市資訊能力競賽 師大分部 校內賽前 12 名參加 12/19 全國資訊能力競賽 交通大學 北市賽前 10 名參加, 全國賽前 10 名進入

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

1 DISJOINT SETS 建國中學 01 年資訊能力競賽培訓講義 //11 Algorithm Path Compression 1: procedure Find(x) : if x.parent x then 3: x.parent Find(x.parent) : retur

PowerPoint Presentation

ebook14-4

Image Compression Using Grey-Based Hopfield Neural

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

untitled

投影片 1

注意事項 一 本比賽系統採用 PC 2, 所使用的 I/O 是標準輸出輸入裝置, 所以可以使用 C 語言的 scanf ( ) printf ( ), 或是 C++ 語言上的 cin cout 來讀入及輸出資料, 比較要注意的是 : 本系統並不是用人工方式來 keyin 資料, 所以不必在意使用者界

Microsoft Word - part doc

試題評析

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

Microsoft Word



Explain each of the following terms. (12%) (a) O(n 2 ) (b) protected in C++ language (c) sparse matrix 7. Write

本章內容 3-1 串列的定義 3-2 用陣列直接儲存串列 循序配置串列 3-3 串列加上鏈結 鏈結配置串列 3-4 用結構體陣列實作鏈結串列 3-5 指標與結構體 3-6 動態配置節點實作鏈結串列 3-7 鏈結串列的其他運算 3-8 環狀鏈結串列 3-9 雙向鏈結串列 *3-10 鏈結串列的應用 2

商應系專業英文詞彙 No. 中文 英文專業名詞 1 供應鏈管理 Supply Chain Management 2 需求預測 Demand Forecasting 3 存貨共擔 Invetory Pooling 4 安全庫存 Safety Stock 5 服務水準 Service Level 6 供

投影片 1

C语言的应用.PDF

1

MergedFile

C/C++ - 结构体、共用体、枚举体

CHAPTER VC#

PowerPoint Presentation

untitled

Microsoft Word htm

C++ 程式設計

第11章 可调内核参数

Microsoft Word - _m30.doc

PowerPoint Presentation

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Figure 1: Game Tree 为 了 方 便 讨 论, 我 们 这 里 设 这 里 讨 论 的 博 弈 树 是 一 棵 有 限 树, 设 有 两 个 棋 手 甲 与 乙 进 行 这 场 博 弈, 这 样, 博 弈 树 分 为 三 类 结 点 : 1. 奇 数 层 的 非 叶 子 结 点 :

第二章 學童視力問題診療

二次曲線 人們對於曲線的使用及欣賞 比曲線被視為一種數學題材來探討要早 得多 各種曲線中 在日常生活常接觸的 當然比較容易引起人們的興趣 比如 投擲籃球的路徑是拋物線 盤子的形狀有圓形或橢圓形 雙曲線 是較不常見的 然而根據科學家的研究 彗星的運行軌道是雙曲線的一部 分 我們將拋物線 圓與橢圓 雙曲

新・解きながら学ぶC言語

Microsoft PowerPoint - VB14.ppt

運算子多載 Operator Overloading

ACI pdf

chap07.key

Microsoft Word - 第04章 堆疊與佇列.doc

撰 寫 人 :2B1 王 清 燕 書 名 : 追 風 箏 的 女 孩 條 碼 號 : 月 份 閱 讀 心 得 佳 作 我 覺 得 這 是 一 本 教 我 們 用 殘 酷 的 角 度 認 識 生 命 的 小 說 ; 與 同 儕 甚 是 摯 友 間 也 可 能 出 現 競 奪 下 的

C/C++语言 - 运算符、表达式和语句

Microsoft Word - ACI chapter00-1ed.docx

C/C++ Programming

Transcription:

樹狀結構 (Tree) NTU CSIE

大綱 樹 (Tree) 二元樹 (Binary Tree) 二元搜尋樹 (Binary Search Tree)

樹 樹 (Tree) 是一種模擬現實生活中樹幹和樹枝的資料結構, 屬於一種階層架構的非線性資料結構, 例如 : 家族族譜, 決策模型

樹的基本術語 樹的樹根稱為 根節點 (Root), 在根節點之下是樹的樹枝, 擁有 0 到 n 個 子節點 (Children), 即樹的 分支 (Branch) 節點 A 是樹的根節點 B C D.H 是節點 A 的子節點

樹的基本術語 在樹枝下還可以擁有下一層樹枝,I 和 J 是 B 的子節點,K L 和 M 是 E 的子節點, 節點 B 是 I 和 J 的 父節點 (Parent), 節點 E 是 K L 和 M 的父節點 節點 I 和 J 擁有共同父節點, 稱為 兄弟節點 (Siblings), K L 和 M 是兄弟節點,B C 和 H 節點也是兄弟節點

樹的相關術語 n 元樹 : 樹的一個節點最多擁有 n 個子節點 二元樹 (Binary Trees): 樹的節點最多只有兩個子節點 根節點 (Root): 沒有父節點的節點是根節點 例如 : 節點 A 葉節點 (Leaf): 節點沒有子節點的節點稱為葉節點 例如 : 節點 I J C D K L M F G 和 H 祖先節點 (Ancenstors): 指某節點到根節點之間所經過的所有節點, 都是此節點的祖先節點

樹的相關術語 非終端節點 (Non-terminal Nodes): 除了葉節點之外的其它節點稱為非終端節點 例如 : 節點 A B 和 E 是非終端節點 分支度 (Dregree): 指每個節點擁有的子節點數 例如 : 節點 B 的分支度是 2, 節點 E 的分支度是 3 階層 (Level): 如果樹根是 1, 其子節點是 2, 依序可以計算出樹的階層數 例如 : 上述圖例的節點 A 階層是 1,B C 到 H 是階層 2,I J 到 M 是階層 3 樹高 (Height): 樹高又稱為樹深 (Depth), 指樹的最大階層數 例如 : 圖例的樹高是 3

大綱 樹 (Tree) 二元樹 (Binary Tree) 二元搜尋樹 (Binary Search Tree)

二元樹 樹依不同分支度可以區分成很多種, 在資料結構中最廣泛使用的樹狀結構是 二元樹 (Binary Trees) 二元樹是指樹中的每一個 節點 (Node) 最多只能擁有 2 個子節點, 即分支度小於或等於 2 二元樹的定義如下所示 : 二元樹的節點個數是 一個有限集合 沒有節點的空集合 二元樹的節點可以分成兩個沒有交集的子樹, 稱為 左子樹 (Left Sub-tree) 右子樹 (Right Sub-tree)

二元樹 : 歪斜樹 左邊這棵樹沒有右子樹, 右邊這棵樹沒有左子樹, 雖然擁有相同節點, 但是這是兩棵不同的二元樹, 因為所有節點都是向左子樹或右子樹歪斜, 稱為 歪斜樹 (Skewed Tree) 資料 資料 資料 資料 資料 資料

二元樹 : 完滿二元樹 若二元樹的樹高是 h 且二元樹的節點數是 2 h -1, 滿足此條件的樹稱為 完滿二元樹 (Full Binary Tree) 0 資料 1 2 資料 資料 3 4 5 6 資料資料資料資料

二元樹 : 完滿二元樹 因為二元樹的每一個節點有 2 個子節點, 二元樹樹高是 3, 也就是有 3 個階層 (Level), 各階層的節點數, 如下所示 : 第 1 階 :1 = 2 (1-1) = 2 0 = 1 第 2 階 : 第 1 階節點數的 2 倍,1*2 = 2 (2-1) = 2 第 3 階 : 第 2 階節點數的 2 倍,2*2 = 2 (3-1) = 4 以此類推, 得到每一階層的最大節點數是 :2 (l-1),l 是階層數, 整棵二元樹的節點數一共是 : 2 0 +2 1 +2 2 = 7 個, 即 2 3-1, 可以得到 : 2 0 +2 1 +2 2 +.+2 (h-1) = 2 h -1,h 是樹高

二元樹 : 完整二元樹 若二元樹的節點總數不足 2 h -1, 其中 h 是樹高, 除最後一層外全填滿, 最後一層節點全靠左, 而且其節點編號是對應相同高度完滿二元樹的節點編號, 因為編號完整, 中間沒有空號, 因此稱為完整二元樹 (Complete Binary Tree) 0 資料 1 2 資料 資料 3 4 資料 資料

二元樹陣列表示法 一棵樹高 h 擁有 2 h -1 個節點的二元樹, 這是二元樹在樹高 h 所能擁有的最大節點數 換句話說, 只需配置 2 h -1 個元素, 我們就可以儲存樹高 h 的二元樹, 如下圖所示

二元樹陣列表示法 二元樹的節點編號擁有循序性, 根節點 1 的子節點是節點 2 和節點 3, 節點 2 是 4 和 5, 依此類推可以得到節點編號的規則, 如下所示 : 左子樹是父節點編號乘以 2 右子樹是父節點編號乘以 2 加 1

二元樹鏈結表示法 二元樹節點鏈結表示法 資料 結構指標 ( 左指標 ) 左節點 節點 資料 右節點 結構指標 ( 右指標 ) 二元樹節點 = 資料 + 結構指標 ( 左 ) + 結構指標 ( 右 )

二元樹鏈結表示法 struct binary_tree_node { 資料型態變數名稱 ; int data; struct binary_tree_node *left; struct binary_tree_node *right; ; typedef struct binary_tree_node node; node *root; root = (node *)malloc(sizeof(node)); root ->data= 10; root ->left= NULL; root ->right= NULL; left node * root node data 10 NULL NULL (malloc) right

小練習 (Binarry_Tree.c) 試著建立一個二元樹如下圖所示 5 5 root node *root; 4 6 // Level 1 root = (node *)malloc(sizeof(node)); root->data = 5; root->left = NULL; root->right = NULL; 4 6 NULL NULL NULL NULL // Level 2 root->left = (node *)malloc(sizeof(node)); root->left->data = 4; root->left->right = NULL; root->left->left = NULL; root->right = (node *)malloc(sizeof(node)); root->right->data = 6; root->right->left = NULL; root->right->right = NULL;

二元樹的走訪 陣列和單向鏈結串列都只能從頭至尾或從尾至頭執行單向 走訪 (Traverse), 不過二元樹的每一個節點都擁有指向左和右 2 個子節點的指標, 所以走訪可以有兩條路徑

二元樹的走訪種類 二元樹的走訪過程是持續決定向左或向右走, 直到沒路可走 二元樹的走訪是一種遞迴走訪, 依照遞迴函數中呼叫的排列順序不同, 可以分成三種走訪方式, 如下所示 : 中序走訪方式 (Inorder Traversal) 前序走訪方式 (Preorder Traversal) 後序走訪方式 (Postorder Traversal)

二元樹的走訪種類 中序走訪 (Inorder Traversal) void print_inorder(node *ptr) { if(ptr!= NULL) { print_inorder(ptr->left); printf("[%2d]\n", ptr->data); print_inorder(ptr->right); 以從小到大方式列印中序 : 1,2,3,4,5,6,7,8,9 先印左子節點 再印自己 ( 中 ) 右子節點最後

二元樹的走訪種類 前序走訪 (Preorder Traversal) 每節點皆會比它的左子節點及右子節點先印 左子節點又比右子節點先印 ( 自已 -> 左 -> 右 ) 5,4,2,1,3,6,8,7,9 後序走訪 (Postorder Traversal) 印自己前先印左節點 再印右節點自己最後 ( 左 -> 右 -> 自已 ) 1,3,2,4,7,9,8,6,5

小練習 (Binarry_Tree.c) 前序走訪 (Preorder Traversal) void print_preorder(node *ptr) { if(ptr!= NULL) { // 前序 : 5,4,2,1,3,6,8,7,9 後序走訪 (Postorder Traversal) void print_postorder(node *ptr) { if(ptr!= NULL) { // 後序 : 1,3,2,4,7,9,8,6,5

二元樹的搜尋 (Tree_LinearSearch.c) 利用二元樹走訪實作二元樹的搜尋 node *search_node(node *ptr, int value) { node *temp; if(ptr!= NULL) { if(ptr->data == value) return ptr; else { temp = search_node(ptr->left, value); if(temp!= NULL) return temp; temp = search_node(ptr->right, value); if(temp!= NULL) return temp; return NULL; 8

大綱 樹 (Tree) 二元樹 (Binary Tree) 二元搜尋樹 (Binary Search Tree)

二元搜尋樹 二元搜尋樹 (Binary Search Trees) 是一種二元樹, 其節點資料的排列擁有一些特性, 如下所示 : 二元樹的每一個節點值都不相同, 在整棵二元樹中的每一個節點都擁有不同值 每一個節點的資料 大於左子節點的資料 且小於右子節點的資料 節點的左 右子樹也是一棵二元搜尋樹

二元搜尋樹 : 插入 node *insert_node(node *root, int value) { node *new_node; node *current; node *parent; node * root, *ptr; char key; int value; root = NULL; 18 10 new_node = (node *)malloc(sizeof(node)); new_node->data = value; new_node->left = NULL; new_node->right = NULL; if(root == NULL) { return new_node; else { current = root; while(current!= NULL) { parent = current; if(current->data > value) current = current->left; else current = current->right; if(parent->data > value) parent->left = new_node; else parent->right = new_node; return root; 5 20 1 8 15 30 scanf("%d",&value); ptr = root; root=insert_node(root, value); printf("insert ok\n"); 10 5 20 1 8 15 30 18

小練習 (BinarySearchTree.c) 請實作上述之二元搜尋樹的插入演算法 並製做一選單讓使用者輸入 i 新增節點 可輸入數字並依據數值大小順序插入節點 ( 假設輸入之數字不會重覆 ) 並試著建構出如上頁圖中的二元樹 Hint: 輸入的次序很重要, 為什麼? 輸入 l 可選擇列印順序印出所有節點內容各以前 / 中 / 後序列印出來

二元搜尋樹 : 搜尋 比較 : 一般二元樹的搜尋 ( search_node() ) node *find_node(node *ptr, int value) { while(ptr!= NULL) { if(ptr->data == value) return ptr; else { if(ptr->data > value) ptr = ptr->left; else ptr = ptr->right; return NULL; 10 5 20 1 8 15 30 scanf("%d",&value); ptr = find_node(root, value); if(ptr!= NULL) printf("found: %d\n", ptr->data); else printf("not found\n");

二元搜尋樹 : 刪除 必須先取得欲刪節點之父節點 判斷此節點為父節點之左節點或右節點 考量三種情況 : 情況 1: 節點沒有左子樹 情況 2: 節點沒有右子樹 情況 3: 節點有左右子樹 ( 程式碼詳見範例程式 ) 10 5 20 scanf("%d",&value); ptr = find_node(root, value); if(ptr!= NULL) root= delete_node(root, value); printf("delete ok\n"); else printf("can not delete\n"); 1 8 15 30

二元搜尋樹 : 刪除 情況 1: 節點沒有左子樹 如果要刪的是根節點 要刪除的節點在父節點右方 要刪除的節點在父節點左方 parrent -> ptr -> root 10 root = root->right; free(ptr); root 30 30 25 35 25 35

二元搜尋樹 : 刪除 情況 1: 節點沒有左子樹 如果要刪的是根節點 要刪除的節點在父節點右方 要刪除的節點在父節點左方 parrent -> root 10 parent->right = ptr->right; free(ptr); root 10 ptr -> 20 30 30 25 35 25 35

二元搜尋樹 : 刪除 情況 1: 節點沒有左子樹 如果要刪的是根節點 其他 要刪除的節點在父節點右方 要刪除的節點在父節點左方 parrent -> root 50 parent->left = ptr->right; free(ptr); root 50 ptr -> 20 30 30 25 35 25 35

二元搜尋樹 : 刪除 情況 2: 節點沒有右子樹 如果要刪的是根節點 其他 parrent -> ptr -> 10 root 5 root = root->left; free(ptr); root 10 8 8 7 9 7 9

二元搜尋樹 : 刪除 情況 2: 節點沒有右子樹 如果要刪的是根節點 其他 要刪除的節點在父節點右方 要刪除的節點在父節點左方 parrent -> root 1 parent->right = ptr->left; free(ptr); root 1 ptr -> 5 8 8 7 9 7 9

二元搜尋樹 : 刪除 情況 2: 節點沒有右子樹 如果要刪的是根節點 其他 要刪除的節點在父節點右方 要刪除的節點在父節點左方 parrent -> root 10 parent->left = ptr->left; free(ptr); root 10 ptr -> 5 8 8 7 9 7 9

二元搜尋樹 : 刪除 情況 3: 節點有左右子樹 往左子節點之右子樹 找最大值當取代點 next-> parent-> ptr-> root 10 5 20 8 15 30 parent = ptr; next = ptr->left;// 找取代點 next, 從左邊開始找 if(next->right!= NULL) { while(next->right!= NULL) { // 往左子節點之右子樹找最大值當取代點 parent = next; //parent 為 next 父節點 next = next->right; // 繞過 next 節點 parent->right = next->left; else { ptr->left = NULL; ptr->data = next->data; // 取代!! free(next); // 刪除 next ( 注意 : 不是刪除 ptr) root 8 7 5 7 20 15 30

二元搜尋樹 : 刪除 情況 3: 節點有左右子樹 往左子節點之右子樹 找最大值當取代點 8 parent = ptr; next = ptr->left;// 找取代點 next, 從左邊開始找 if(next->right!= NULL) { while(next->right!= NULL) { // 往左子節點之右子樹找最大值當取代點 parent = next; //parent 為 next 父節點 next = next->right; // 繞過 next 節點 parent->right = next->left; else { ptr->left = NULL; ptr->data = next->data; // 取代!! free(next); // 刪除 next ( 注意 : 不是刪除 ptr) 5 ptr-> 20 root 8 7 next-> 15 30 5 15 7 30

小練習 (BinarySearchTree.c) 完成實做以上介紹之二元搜尋樹 功能 : 輸入 i 新增節點, 可輸入數字, 依據數值大小順序插入節點 ( 假設輸入之數字不會重覆 ) 輸入 d 接著輸入數字, 可將一筆資料節點中之數字相同者刪除 ( 假設輸入之數字不會重覆 ) 輸入 f 接著輸入一個數字, 可將一筆資料節點中之數字相同者印出資料 輸入 l 依據數字順序印出所有節點內容 輸入 q 讀取離開程式

回家作業 (Addressbook_Tree.c) 使用二元搜尋樹製作一個電話簿 功能 : 輸入 i 新增節點, 可輸入姓名, 電話, 依據姓名字母順序插入節點 ( 假設輸入之姓名不會重覆 ) 輸入 d 接著輸入姓名, 可將一筆資料節點中之姓名相同者刪除 ( 假設輸入之姓名不會重覆 ) 輸入 f 接著輸入一個姓名, 可將一筆資料節點中之姓名相同者印出資料 輸入 l 依據姓名字母順序印出所有節點內容 輸入 q 讀取離開程式