一棵二叉樹是結點的乙個有限集合,該集合或者為空,或者是由乙個根節點加上兩棵分別稱為左子樹和右子樹的二叉樹組成。1.若規定根節點的層數為1,則一棵非空二叉樹的第i層上最多有2^(i-1)(i>0)個結點2.若規定只有根節點的二叉樹的深度為1,則深度為k的二叉樹的最大結點數是2^k-1(k>=0)
3.對任何一棵二叉樹, 如果其葉結點個數為 n0, 度為2的非葉結點個數為 n2,則有n0=n2+1
4.具有n個結點的完全二叉樹的深度k為log2(n+1)上取整
5.對於具有n個結點的完全二叉樹,如果按照從上至下從左至右的順序
對所有節點從0開始編號,則對於序號為i的結點有:
若i>0,雙親序號:(i-1)/2;i=0,i為根節點編號,無雙親結點
若2i+1若2i+2
這裡採用先序遍歷建立,但要注意的是單純的靠先序遍歷是無法還原一顆二叉樹的,所以這裡的先序建立指的是帶空節點的先序建立,也就是說,當子樹為空的時候,也是要建立的,只不過建立的是空節點。**如下:typedef int tdatatype;
//二叉樹的定義
typedef struct bnode bnode;
//這裡主要是為了每次建立完之後把用了大小返回,方便下乙個建立
typedef struct result;
bnode * createnode(tdatatype data)
result createtree(tdatatype preorder, int size)
; return result;
} tdatatype rootvalue = preorder[0];
if (rootvalue == -1)
; return result;
} bnode *root = createnode(rootvalue);
result lr= createtree(&preorder[1], size - 1);
root->left = lr.root;
result rr = createtree(&preorder[1 + lr.used], size - 1 - lr.used);
root->right = rr.root;
result result = ;
return result;
}
二叉樹相關概念及建立
度就是乙個節點的分支數 對於任何乙個 二叉樹,如 果其葉節點的個數為n0,度為2的非葉節點個數是n2,則有n0 n2 1 n0 n1 n2 2 n2 n1 1 n0 n2 1 度為1的非葉子節點個數為n1 節點個數為n0 n1 n2 邊的個數為2 n2 n1 節點的個數為 邊的個數 1 具有n個節點...
二叉樹基本概念及性質
二叉樹基本概念 在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用於實現二叉查詢樹和二叉 堆。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 二叉樹的子樹有左右之分,次序不能顛倒。二叉樹...
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...