2.二叉樹的性質
3.二叉樹的儲存結構
二叉樹是一種典型的樹形結構
二叉樹的特點是每個結點至多有兩棵子樹,即二叉樹的度
是2,並且二叉樹的子樹有左右之分,不可任意顛倒次序
結點個數為0的二叉樹
一棵深度為k,且有2^k - 1個結點的二叉樹,稱為滿二叉樹。
特點是每一層上的結點數都是最大結點數。
在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且或者最後一層是滿的,或者是在右邊缺少連續若干結點,則此二叉樹為完全二叉樹。
a:滿二叉樹/完全二叉樹
b:完全二叉樹
c&d:非完全二叉樹
空二叉樹
只有根結點
根結點只有左子樹
根結點只有右子樹
根結點既有左子樹又有右子樹
由上面的基本形態易得,每個二叉樹必然包含3部分
資料部分
左子樹指標
右子樹指標
//二叉樹結點定義
template
<
typename datatype>
class
bitnode
//構建指定資料域的結點
bitnode
(datatype newdata)
private
: datatype data;
//資料域
bitnode *lchild;
//左子樹指標
bitnode *rchild;
//右子樹指標
};
具有n個結點的非空二叉樹有且僅有n-1個分支
非空二叉樹的第i層最多有2^(i-1)個結點
深度為k的二叉樹最多有2^k - 1個結點
在任意非空二叉樹中,若葉子結點的數目為n_0,度為2的結點數目為n_2,則n_0=n_2+1成立
具有n(n>0)個結點的完全二叉樹的深度為k=n/2(向下取整)
結點i的定義:
若對具有n個結點的完全二叉樹的所有結點按層從上到下,每層從左到右的次序依次對結點從1開始編號 那麼結點i有如下性質
i=1時,i為二叉樹的根結點
i>1時,i的父親結點為i/2(向下取整)
若2i<=n,則i的左兒子的編號為2i
若2i>n,則i沒有左兒子
若2i+1<=n,則i的右兒子的編號為2i+1
若2i+1>n,則i沒有右兒子
使用一塊連續的儲存空間儲存二叉樹
優點:結構緊湊,沒有額外的指標空間,隨機訪問能力強
缺點:插入和刪除元素時操作費時,所需空間大時,容易崩潰,不利於對碎片空間的利用
由完全二叉樹結點性質可得出結點的序號關係:
編號為i的結點的左兒子的編號為2i(如果存在左結點的話)
編號為i的結點的右兒子的編號為2i+1(如果存在右結點的話)
而非完全二叉樹也可以使用上面的規則編號,就是會有許多編號無人認領,造成浪費
//二叉樹線性表示
template
<
typename datatype>
class
seqbt}~
seqbt()
};
二叉樹是一種非線性的結構
使用鏈式結構能夠很直觀地表示二叉樹的邏輯結構
並且即使二叉樹是非二叉樹的時候 仍舊能夠很好的表示,不會像順序結構產生空結點
優點:能夠很好的利用記憶體中的碎片空間,提高記憶體空間的利用效率
缺點:不能隨機訪問某個結點,需要進行遍歷,耗時
//二叉樹鏈式表示
template
<
typename datatype>
class
bintree
};
樹結構 二叉樹
二叉樹 如果書中的每個節點最多只有兩個子節點,這樣的樹就叫做二叉樹 1.二叉樹的重要特性 二叉樹第 i 層的最大節點數為 2 i 1 i 1 深度為 k 的二叉樹最大節點總數為 2 k 1 對於任何乙個非空二叉樹t,若n0表示葉節點的個數,n2為度為2的非空葉節點個數,那麼兩者滿足 n0 n2 1 ...
資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹
樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...
7 樹結構和二叉樹
6.樹結構和二叉樹 樹結構中每個元素最多只有乙個前驅,但可能有多個後繼,體現出明顯的層次關係。6.1樹的相關概念 6.2樹的儲存結構與遍歷 6.3二叉樹 樹的基本概念 需要注意的是葉子節點的高度為0,如果樹只有乙個節點,那麼這個節點的高也是0 需要注意的是根節點的深度 depth 是0.從heigh...