新手入門 二叉樹

2021-09-30 20:05:57 字數 1774 閱讀 6394

滿二叉樹:每個結點都滿

完全二叉樹:具有滿二叉樹的部分性質,滿足至少有左邊的結點

某一層的結點數: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的子結點。...