一、 樹的相關名詞
根節點——一棵樹最上方的結點
結點的度——結點擁有的子樹的數目(eg上圖b的度為1)。
葉子結點——度為0的結點(不為0的稱為分支結點)。
樹的度——樹中結點的最大的度
層次——根結點的層次為1,其餘結點的層次等於該結點的雙親結點的層次加1
樹的高度——樹中結點的最大層次
森林——0個或多個不相交的樹組成。對森林加上乙個根,森林即成為樹;刪去根,樹即成為森林。
二、二叉樹二叉樹6條的重要性質:
1、在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0=n2+1(證一下:總度數n=n0+n1+n2 (因為有0,1,2三類結點),又有n=n00+n11+n2*2+1(這是利用度之間關係,可以找個簡單二叉樹的圖驗證理解一下)兩個式子劃等號就有結果了。)
2、二叉樹第i層上的結點數目最多為2i-1(i>=1)
3、深度為k的二叉樹至多有2k-1個結點(k>=1)
4、若二叉樹按照從上到下從左到右依次編號,則若某節點編號為k,則其左右子樹根節點編號分別為2k和2k+1
5、包含n個結點的二叉樹的高度至少為(log2n)+1(不要漏了加1,利用特殊特殊例子記憶:只有乙個結點,高度為1)。
6、在完全二叉樹中,具有n個節點的完全二叉樹的深度為[log2n]+1,其中[log2n]+1是向下取整
三、3種重要的二叉樹
1、滿二叉樹2、完全二叉樹3、二叉查詢樹
定義:二叉查詢樹又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x結點包含關鍵字key,結點x的key值計為key[x]。如果y是x的左子樹中的乙個結點,則key[y]<=key[x];如果y是x的右子樹的乙個結點,則key[y]>=key[x]
四、二叉樹的實現方式
1.第一類陣列實現——空間浪費
用陣列root儲存結點值。
在這種實現當中,對於編號為k的節點,其左子節點的編號為2k,右子節點的編號為2k + 1,根節點的編號為1。這種實現易產生巨大的空間浪費,比如對於乙個只有一條鏈的樹,假設該樹含有31個節點,儲存這31個節點卻需要開乙個2^30的陣列,因此該方法較少使用。
2.結構體+指標實現——節省空間3.第二類陣列實現
對於一棵有n個節點樹,只需要開乙個大小為n的陣列,節點按照出現順序依次編號,這麼一來,每個節點的左右節點的編號就無法通過2k,2k+1的形式來直接確定了。
這時就需要陣列lch[maxn] , rch[maxn];其中lch[u]表示p節點的左子節點的編號,因此通過p = lch[p]就可以訪問到p節點的左子節點,rch[p]的含義同理。
另外,用value[p]表示編號為p節點的權值,如此一來,申請新節點的newnode函式與初始化的newtree函式寫法就變得不同了。
五、二叉樹的三種遍歷方式
1、 先序遍歷:按照根節點->左子樹->右子樹的順序訪問二叉樹
2、 中序遍歷:按照左子樹->根節點->右子樹的順序訪問二叉樹
3、 後序遍歷:按照左子樹->右子樹–>根節點的順序訪問二叉樹
參考:
二叉樹詳解
一 簡介 世界上的樹有千萬種,我們這裡來學習我們資料結構中的樹,它是我們現實生活中倒置的樹。之前,我們學習的順序表,鍊錶,棧 和佇列。可以說都是我們的線性結構,也就是我們所謂的一對一的結構,可是現實生活中,我們經常碰到是我們一對多的情況。今天,我們就來研究一下這種一對多的資料結構體 樹 那麼,什麼叫...
二叉樹詳解
一 二叉樹的一些概念 二叉樹就是每個結點最多有兩個子樹的樹形儲存結構。先上圖,方便後面分析。1 滿二叉樹和完全二叉樹 上圖就是典型的二叉樹,其中左邊的圖還叫做滿二叉樹,右邊是完全二叉樹。然後我們可以得出結論,滿二叉樹一定是完全二叉樹,但是反過來就不一定。滿二叉樹的定義是除了葉子結點,其它結點左右孩子...
二叉樹詳解
樹是一種比較重要的資料結構,尤其是二叉樹。二叉樹是一種特殊的樹,在二叉樹中每個節點最多有兩個子節點,一般稱為左子節點和右子節點 或左孩子和右孩子 並且二叉樹的子樹有左右之分,其次序不能任意顛倒。本篇部落格將詳細為大家解析二叉樹。首先介紹兩個概念 滿二叉樹 在一棵二叉樹中,如果所有分支結點都有左孩子和...