二叉樹分類不少,其中滿二叉樹哦和徹底二叉樹比較特殊,由於這兩種二叉說效率很高,這裏記錄幾條相關性質。數組
首先是滿二叉樹:從形象上來講滿二叉樹是一個絕對的三角形,也就是說它的最後一層所有是葉子節點,其他各層所有是非葉子節點,若是用數學公式表示那麼其節點數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;
若是是建立徹底二叉樹或者滿二叉樹,你徹底可使用一個VECTOR或者數組來盛放。