本文基於鄧俊輝編著的《數據結構(C++語言版)(第3版)》和網上博文,僅介紹完全二叉樹、滿二叉樹,平衡二叉樹的相關概念。
一、二叉樹
1、二叉樹的概念
二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree),其次序不能任意顛倒。(百度百科)
2、性質
(1)若二叉樹的層次從0開始,則在二叉樹的第i層至多有2^i個結點(i>=0);
(2)高度為k的二叉樹最多有2^(k+1) - 1個結點(k>=-1)。 (空樹的高度為-1);
(3)對任何一棵二叉樹,如果其葉子結點(度為0)數為m, 度為2的結點數為n, 則m = n + 1。
二、幾種特殊的二叉樹
1、滿二叉樹
所有葉結點同處於最底層(非底層結點均是內部結點),一個深度為k(>=-1)且有2^(k+1) - 1個結點。如圖(圖來源於veil的博客):

2、完全二叉樹
葉結點只能出現在最底層的兩層,且最底層葉結點均處於次底層葉結點的左側。規模為n的完全二叉樹,高度為

3、平衡二叉樹
平衡二叉樹(Self-balancing binary search tree)又被稱為AVL樹(有別於AVL算法),且具有以下性質:它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。平衡二叉樹的常用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等。 最小二叉平衡樹的節點的公式如下 F(n)=F(n-1)+F(n-2)+1 這個類似於一個遞歸的數列,可以參考Fibonacci(斐波那契)數列,1是根節點,F(n-1)是左子樹的節點數量,F(n-2)是右子樹的節點數量。(百度百科)

對於平衡二叉樹要特別注意的是,不要求非葉節點都有兩個子結點,僅要求兩個子樹的高度差的絕對值不超過1,或者為空樹。
三、存儲方式
存儲的方式和圖一樣,有鏈表和數組兩種,用數組存訪問速度快,但插入、刪除節點操作就比較費時了。實際中更多的是用鏈來表示二叉樹的。
Ref:
