滿二叉樹:每個結點都滿
完全二叉樹:具有滿二叉樹的部分性質,滿足至少有左邊的結點
某一層的結點數:nlevel - 1(n表示n叉樹)
某一深度結點數:nh - 1
一般二叉樹性質
1、在非空二叉樹的i層上,至多有2i-1個節點(i>=1)。通過歸納**證。
2、在深度為k的二叉樹上最多有2k-1個結點(k>=1)。通過歸納**證。
3、對於任何一棵非空的二叉樹,如果葉節點個數為n0,度數為2的節點個數為n2,則有: n0 = n2 + 1
在一棵二叉樹中,除了葉子結點(度為0)之外,就剩下度為2(n2)和1(n1)的結點了。則樹的結點總數為t = n0+n1+n2;在二叉樹中結點總數為t,而連線數為t-1.所以有:n0+n1+n2-1 = 2*n2 +n1;最後得到n0 = n2+1;
完全二叉樹性質
如果有一顆有n個節點的完全二叉樹的節點按層次序編號,對任一層的節點i(1<=i<=n)有
1.如果i=1,則節點是二叉樹的根,無雙親,如果i>1,則其雙親節點為[i/2],向下取整
2.如果2i>n那麼節點i沒有左孩子,否則其左孩子為2i
3.如果2i+1>n那麼節點沒有右孩子,否則右孩子為2i+1
**部分:
1.二叉樹的構建:
typedef struct node
tree;
void creattree(tree *&t)
else
}
2.二叉樹的前序遍歷
void perorder(tree *p)
}
3.二叉樹的中序遍歷
void inorder(tree *p)
}
4.二叉樹的後序遍歷
void posorder(tree *p)
}
5.二叉樹的層序遍歷
void levelorder(tree *p)
if(t->right)}}
6.二叉樹的深度優先遍歷
void dfs(tree *p)
if(t->left)}}
完整**:
#include using namespace std;
const int maxn = 1005;
typedef struct node
tree;
void creattree(tree *&t)
else
}void perorder(tree *p)
}void inorder(tree *p)
}void posorder(tree *p)
}void levelorder(tree *p)
if(t->right)
}}void dfs(tree *p)
if(t->left)
}}//測試樣例
//abcd###ef##g###
int main()
專為新手入門二叉樹(C實現)
本篇部落格主要涉及二叉樹的基本操作,建立,三種遍歷,求節點等 c寫法 二叉樹作為資料結構的難點,想必讓很多人望而生畏,各種複雜的 和演算法實在讓人頭大,博主也是近期剛接觸二叉樹,對於二叉樹的 也不是很深刻,所以有紕漏還請體諒。struct btnode 3.二叉樹的建立 知道了二叉樹的儲存結構,怎麼...
二叉樹入門
對二叉樹的儲存,即可採用順序儲存結構 陣列 也可採用鏈式儲存結構 鍊錶 在鏈式儲存結構中,每乙個節點都含有乙個資料域,兩個指標域 分別用來指向該節點的左 右子樹。利用這種節點構成的鏈式儲存結構稱為二叉鍊錶。為簡單起見,給定一資料集,以該資料集中的元素建立一完全二叉樹。這裡不考慮非完全二叉樹的情況。如...
二叉樹入門
樹是模擬實現樹幹和樹枝的一種資料結構,如同樹根一樣,樹結構都有乙個 根結點 根節點之下如同樹的樹枝一樣,可以擁有0到n個 子結點 也就是樹的 分支 如上圖。a就是這棵樹的根節點,b c就是結點a的子結點。也就是樹枝。每一根樹枝當然可以有小樹枝,也就是子節點本身可以擁有子結點。途中d和e是b的子結點。...