二叉樹分類很多,其中滿二叉樹和完全二叉樹比較特殊,因為這兩種二叉說效率很高,這里記錄幾條相關性質。
首先是滿二叉樹:從形象上來說滿二叉樹是一個絕對的三角形,也就是說它的最后一層全部是葉子節點,其余各層全部是非葉子節點,如果用數學公式表示那么其節點數n=2^k-1其中k表示深度,也就是層數。也就是說滿二叉樹的節點數是一系列固定的數,比如說,1,3,7,15...如果節點數不是這個序列中的數,那么他肯定不是滿二叉樹,當然了,反之,是不成立的。
由於它的節點數和形狀固定,我們可以發現很多其數學公式性質。
首先是節點數和深度的關系 n=2^k-1
第二是第i層上的節點數為2^(i-1)
第三是給所有的節點編號(從1號開始而不是從零號開始)那沒對於一個編號為i的節點我們可以根據i的大小,判斷出他是左節點還是右節點,父節點是誰,子節點是誰。比如我們給一個編號13的節點,那么他是基數所以他是右節點,因為節點的左右變化和數據的基偶性是同步變化的。他的父節點是13/2=6(是從1好開始的)他的左子節點是13*2=26右子節點是13*2+1=27同理還可以求他的兄弟節點,父節點的父節點,
總而言這在滿二叉樹中只要有了一個節點的編號那么他在整個二叉樹中的位置就確定了,正是由於這個原因,我們更傾向於使用順序結構而不是鏈式結構來存儲滿二叉樹。
然而由於滿二叉樹的節點數必須是一個確定的數,而非任意數,他的使用受到了某些限制,為了打破另一個限制,我們定義一種特殊的滿二叉樹——完全二叉樹。
完全二叉樹的節點個數是任意的,從形式上來說他是一個可能有缺失的三角形,但所缺部分肯定是右下角的某個連續部分。這樣說不玩整,更准確來說,我們可以說他和滿二叉樹的區別是,他的最后一行可能不是完整的,但絕對是右方的連續部分缺失。可能聽起來有點亂,用數學公式講,對於K層的完全二叉樹,其節點數的范圍是2^(k-1)-1<N<2^k-1;
一棵深度為k且有2的k次方減1個結點的二叉樹是滿二叉樹。 深度為k的,有n個結點的二叉樹,當且僅當其每一個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應時,稱為完全二叉樹。
1 1 / \ / \ 1 1 1 1 / \ / \ / \ 1 1 1 1 1 1
滿二叉樹 完全二叉樹
*************************************************************************************************************************************************************
二叉樹:
是n(n>=0)個結點的有限集合,它或者是空樹(n=0),或者是由一個根結點及兩顆互不相交的、分別稱為左子樹和右子樹的二叉樹所組成。
滿二叉樹:
一顆深度為k且有2^k-1個結點的二叉樹稱為滿二叉樹。
除葉子結點外的所有結點均有兩個子結點。節點數達到最大值。所有葉子結點必須在同一層上。
完全二叉樹:
若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。
判斷完全二叉樹