陣列的優缺點:
鍊錶的優缺點:
缺點:在進行查詢時,效率仍然較低,需要從頭節點開始遍歷,時間複雜度為o(n)。
樹的優點:能提高資料儲存和讀取的效率,比如利用二叉搜尋樹,既可以保證資料的查詢速度,同時也可以保證資料的插入,刪除,修改的速度。
樹的常用術語(結合示意圖理解):
樹的基本性質:
二叉樹:每個節點最多只能有兩個子節點的樹,也就是每個節點的度最大為2。
二叉樹的特點:
二叉樹的性質:
2^h-1
的推導:
在高度為h的樹上,樹的高度即為層數,第一層最多有2^0個節點,第二層最多有2^1個節點...第n層最多有2^(h-1)個節點
設s為總節點個數,那麼:
s=2^0+2^1+2^2+...+2^(h-1) (公式1)
2s=2*(2^0+2^1+2^2+...+2^(h-1))=2^1+2^2+...+2^h (公式2)
使用公式2減去公式1得出s=2^h-2^0=2^h-1
n0=n2+1
的推導:
已知非空二叉樹的葉子節點個數為n0,度為2的節點個數為n2,假設度為1的節點個數為n1,那麼有:
樹的總節點個樹為n=n0+n1+n2
樹的邊條數為t=n1+2*n2(度為1的節點有一條邊,度為2的節點有兩條邊)=n-1(每個節點頭上都有一條邊,除了根節點)=n0+n1+n2-1(將上面的n的公式代入)
即有n1+2*n2=n0+n1+n2-1,消除左右公共項,得出n2=n0-1,也就是n0=n2+1
真二叉樹:所有節點的度要麼為0,要麼為2。
滿二叉樹:最後一層節點的度都為0,其他節點的度都為2。
滿二叉樹是一棵特殊的真二叉樹。
在同樣高度的二叉樹中,滿二叉樹的葉子節點數量最多、總節點數量最多。
假設滿二叉樹的高度為h(h>=1),那麼:
完全二叉樹:二叉樹的所有葉子節點都在最後一層或者倒數第二層,而且最後一層的葉子節點在左邊連續,倒數第二層的葉子節點在右邊連續。
完全二叉樹從根結點至倒數第2層是一棵滿二叉樹。
滿二叉樹是一棵特殊的完全二叉樹。
完全二叉樹的性質:
h=floor(log2(n))+1
的推導:
已知完全二叉樹的高度為h(h>=1),總節點的數量為n:
那麼總節點數量至少有2^0+2^1+2^2+...+2^(h-1)+1=2^(h-1)個(從根節點到倒數第二層的滿二叉樹+最後一層乙個節點),
最多有2^0+2^1+2^2+...+2^h=2^h-1個(滿二叉樹),
即2^(h-1)<=n<=2^h-1<2^h
對等式兩邊取對數得出:h-1<=log2(n)一棵有n個節點的完全二叉樹(n>0),從上到下、從左到右對節點從1開始進行編號,對任意第i個節點:
一棵有n個節點的完全二叉樹(n>0),從上到下、從左到右對節點從0開始進行編號,對任意第i個節點:
題目:如果一棵完全二叉樹有768個節點,求葉子節點的個數?
答案:768/2=384
假設完全二叉樹有n個節點,度為0的節點個數為n0,度為1的節點個數為n1,度為2的節點個數為n2,那麼有
n=n0+n1+n2,前面有公式n0=n2+1
即n=n0+n1+n0-1=2n0+n1-1
即n0=(n-n2+1)/2
完全二叉樹的n1要麼為0,要麼為1
當n1為1時,n0=n/2,n一定是偶數
當n1為0時,n0=(n+1)/2,n必然是奇數
總結公式:
n0=floor((n+1)/2)=ceiling(n/2)
n1+n2=floor(n/2)=ceiling((n–1)/2)
資料結構與演算法之二叉樹
樹同時具有鍊錶和陣列的優點,關於樹的術語有 根 樹頂端的節點 葉子節點 沒有子節點的節點 樹那個節點所對應的資料結構 節點物件類,包含資料 public class node 將資料插到樹中 public void inser int id,double dd public boolean dele...
資料結構與演算法之二叉樹概念
樹示意圖和常用術語 樹的常用術語 結合示意圖理解 1 節點 2 根節點 3 父節點 4 子節點 5 葉子節點 沒有子節點的節點 6 節點的權 節點值 7 路徑 從root節點找到該節點的路線 8 層9 子樹 10 樹的高度 最大層數 11 森林 多顆子樹構成森林 二叉樹的概念 1 樹有很多種,每個節...
資料結構與演算法之二叉樹查詢
二叉樹 查詢指定節點 要求1 請編寫前序查詢,中序查詢和後序查詢的方法。2 並分別使用三種查詢方式,查詢 herono 5 的節點 3 並分析各種查詢方式,分別比較了多少次 思路分析 實現 public class treedemo class binarytree 前序遞迴遍歷 public vo...