- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
资料结构堆叠与伫列-建中首页
95建中資訊科校內培訓 CK5925 黃上恩
Data Structure - Tree PAGE 2/ NUMPAGES 2
資料結構:Tree
95/10/
◤基礎篇◢
名詞解釋
樹(Tree)是由一些有連結的節點(node)組成,且架構如下:
恰有一個特別的節點叫做根節點(root)
除了root以外剩下的節點被分成個相互獨立的點集合,每一個集合都構成樹。我們稱這些樹為根節點的子樹(subtree),每個子樹的根節點被稱為子節點(Child)。
換個方法定義,樹(Tree)是一個連通的圖(graph),兩點之間恰有一條路徑可達。此外,一個節點的度數(degree)就是這個節點的子節點個數。整棵樹的度數N也就定義為所有節點度數的最大值,此時我們說這棵樹是個N元樹。森林(Forest)是許多樹的聯集。
【題1】給定一個森林其所有節點(編號為)的父節點編號以及,請判斷是否屬於同一棵樹,若屬於同一棵樹,那麼的距離為何?所謂距離(distance),指的是從到所經過的最少節點數加1。(若無父節點那麼)
樹的表示式
除了把Tree圖畫出來以外(這樣太佔空間了),我們可以用一個List列出來。如由上方的圖我們可以用括弧表示每個子樹,因此整棵樹列出來像這樣:
(1 (2 (4 (5, 6(7))), 3))
每一個node可以表示成如下:
data
link 1
link 2
…
link
但是這樣會有浪費記憶體的可能,所以我們考慮用另一種表示方法,讓這棵樹或是森林轉換成二元樹。這樣每個node只要記錄最多兩個link就好了。在此之前我們先介紹最重要的樹狀結構:二元樹(Binary Trees)。
二元樹的每個節點至多有兩個子節點,且有分左右。一個節點的結構可表示如下:
Struct BinaryTreeNode{
BinaryTreeNode *Father;
DataType Data;
BinaryTreeNode *LeftChild;
BinaryTreeNode *RightChild;} *Root;
二元樹的走訪
因為要直接表示一棵二元樹有些困難,所以我們以某些特定順序探訪這棵樹,所得的序列就是這棵樹的資料。
前序表示法preorder:root, left-subtree, right-subtree
中序表示法inorder:left-subtree, root, right-subtree
後序表示法postorder:left-subtree, right-subtree, root
【題2】給定二元樹的preorder以及postorder,求inorder。
將一般的Tree或Forest化簡為Binary Tree,有一種常用的方法Left-Child-Right-Sibling:也就是將所有節點重新定義,其左子節點仍為此節點的左子節點,右子節點定義為這個節點的右邊兄弟。
◤實力養成篇◢
二元搜尋樹(Binary Search Tree)
對於陣列來說,要查找一筆資料用二分搜尋法可以在時間內達成,但是如果現在的資料結構不是陣列呢?假設這些資料分散在記憶體中,那麼只要建立二元搜尋樹(BST)的結構,平均只要的時間就可以新增、查找資料。BST是一個二元樹,並滿足以下條件:對於任意節點S,S的左子樹的所有節點的鍵值不大於S的鍵值,S的右子樹的所有節點的鍵值不小於S的鍵值。
二元計算樹
【題3】給定一個四則運算的計算式,請你算出答案。
每一個四則運算的計算式都可以用二元計算樹的前序表示法表示出來。四則運算式中的每個數都是二元計算樹中的一片葉子,而每個運算元都是一個非葉子的節點。這棵計算樹用後序表示法表示時有一個好處,就是不必使用括號就可以知道計算步驟。
例如:請把1+(2+3)*4以postorder表示。那麼我們把這棵樹畫出來如右圖;所以得到postorder:123+4*+。
堆積heap
堆積是一種二元樹。其最大的特點為每個節點的鍵值永遠比左子節點或右子節點上的鍵值小(或大)。這樣可每次以取得最小值(或最大值),然後用的時間整理heap,對於動態資料的處理相當方便。
文档评论(0)