二叉樹是一種特殊的樹。二叉樹的特點是每個結點最多有兩個兒子,左邊的叫做左兒子,右邊的叫做右兒子,或者說每個結點最多有兩棵子樹。更加嚴格的遞迴定義是:二叉樹要麼為空,要麼由根結點、左子樹和右子樹組成,而左子樹和右子樹分別是一棵二叉樹。 下面這棵樹就是一棵二叉樹。
二叉樹的使用範圍最廣,一棵多叉樹也可以轉化為二叉樹,因此我們將著重講解二叉樹。
二叉樹中還有連兩種特殊的二叉樹叫做滿二叉樹和完全二叉樹。如果二叉樹中每個內部結點都有兩個兒子,這樣的二叉樹叫做滿二叉樹。或者說滿二叉樹所有的葉結點都有同樣的深度。比如下面這棵二叉樹,是不是感覺很「豐滿」。滿二叉樹的嚴格的定義是一棵深度為h且有2h-1個結點的二叉樹。
如果一棵二叉樹除了最右邊位置上乙個或者幾個葉結點缺少外其它是豐滿的,那麼這樣的二叉樹就是完全二叉樹。嚴格的定義是:若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層從右向左連續缺若干結點,就是完全二叉樹。也就是說如果乙個結點有右子結點,那麼它一定也有左子結點。例如下面這三棵樹都是完全二叉樹。其實你可以將滿二叉樹理解成是一種特殊的或者極其完美的完全二叉樹。
其實完全二叉樹類似下面這個形狀。
說到這裡我們馬上就要領略到完全二叉樹的魅力了。先想一想一棵完全二叉樹如何儲存呢?其實完全二叉樹中父親和兒子之間有著神奇的規律,我們只需用乙個一維陣列就可以儲存完全二叉樹。首先將完全二叉樹進行從上到下,從左到右編號。
《啊哈!演算法》演算法10:二叉樹
演算法10 二叉樹
1.給定二叉樹的前序和中序遍歷陣列,重新構建二叉樹 int pre new int int in new int 假設前序陣列pre 起始座標ps,pe 中序陣列in is,ie 前序陣列的第乙個元素即為根節點rootvalue 1 尋找根節點在中序陣列中的位置索引rootinindex 3 從中序...
二叉樹演算法
include include include define elementtype int node structure constructor typedef struct bt binarytreenode,btroot function declear inorder btroot root...
二叉樹演算法
二叉樹的遍歷演算法 1.先序遍歷 對每乙個節點將其看作根節點按照根左右的順序進行遍歷。示例 void preordertree node root 先序遍歷二叉樹 return 2.中序遍歷 對每乙個節點將其看作根節點按照左根右的順序進行便利。示例 void inordertree node roo...