数据结构与算法6—树
樹
?
樹的表示方式有
二叉樹
二叉樹是另一種重要的樹形結構,是度為2的有序樹,它的特點是每個結點至多有兩棵子樹。
?
二叉樹的遞歸定義
二叉樹是n(n≥0)個結點的有限集。它或者是空集(n=0),或者同時滿足以下兩個條件:
? ? (1) 有且僅有一個根結點;
? ? (2) 其余的結點分成兩棵互不相交的左子樹和右子樹。
?
二叉樹的特點
如果二叉樹的根結點只有一棵子樹,必須明確區分它是左子樹還是右子樹,因為兩者將構成不同形態的二叉樹。
注意:二叉樹不是樹的特例。它們是兩種不同的數據結構。
?
二叉樹舉例
?
二叉樹的性質
性質1:在二叉樹的第i層上至多有2i-1 個結點。 (i≥1)
?
性質2:深度為 k 的二叉樹上至多含 2k-1 個結點(k≥1)
證明:
性質3:對任何一棵二叉樹,若它含有n0個葉子結點、n2個度為2的結點,則必存在關系式:n0= n2+1。
即 葉子結點數=度2結點 + 1
性質4:具有n個結點的完全二叉樹的深度為 [log2n]?+1? 下取整
證明:
性質5:
若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意一個編號為 i 的結點:
? ? (1) 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號為 ?i/2? 的結點為其雙親結點;
? ? (2) 若 2i>n,則該結點無左孩子,否則,編號為 2i 的結點為其左孩子結點;
? ? (3) 若 2i+1>n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子結點。
?
兩類特殊的二叉樹:
滿二叉樹
指的是深度為k且含有2k - 1個結點的二叉樹。
特點:
(1)每一層上結點數都達到最大
(2)度為1的結點n1=0,樹葉都在最下一層。
滿二叉樹結點層序編號方法:
從根結點起從上到下逐層(層內從左到右)對二叉樹的結點進行連續編號。
?
?完全二叉樹
樹中所含的 n 個結點和滿二叉樹中編號為 1 至 n 的結點一一對應。
完全二叉樹的特點:
1、滿二叉樹是完全二叉樹,完全二叉樹不一定是滿二叉樹;
2、在完全二叉樹中,若某個結點沒有左孩子,則它一定沒有右孩子,即該結點必是葉結點。
?
?二叉樹的存儲結構:
?1.順序存儲結構
用一組地址連續的存儲單元,以層序順序存放二叉樹的數據元素,結點的相對位置蘊含著結點之間的關系。
如完全二叉樹
非完全二叉樹,存儲時必須將相應的位置空出來,使存放的結果符合完全二叉樹的形狀。
?
所以,二叉樹順序存儲結構僅適用于完全二叉樹。
若存儲非完全二叉樹時有可能對存儲空間造成極大的浪費:
在最壞的情況下,一個深度為K且只有K個結點的右單支樹需要2K-1個結點存儲空間。
?
二叉樹的鏈式存儲結構
根據二叉樹的非線性結構的特點,常用鏈式存儲方式來表示二叉樹。
二叉樹的鏈式存儲結構有3種,它們是二叉鏈表、三叉鏈表和線索鏈表。
?二叉鏈表存儲結構
把每個結點分成三個域:一個域存放結點本身的信息,另外兩個是指針域,分別存放左、右孩子的地址。每個結點的結構表示為:
?
?二叉鏈表的C 語言類型描述如下:
typedef char TElemType; typedef struct Node { TElemType data;struct Node *lchild, *rchild; } BiTNode, *BiTree;?
三叉鏈表(帶雙親指針的二叉鏈表)
?
轉載于:https://www.cnblogs.com/lisen10/p/10850336.html
總結
以上是生活随笔為你收集整理的数据结构与算法6—树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 栈的相关操作
- 下一篇: docker基础应用