二叉樹和完全二叉樹

2021-10-04 22:14:03 字數 1603 閱讀 5943

二叉樹規律:

假設根節點的高度為0

二叉樹是每個節點至多只有兩個節點的樹

深度為i所在的層至多有 2^i個節點

高度為k的二叉樹至多有2^(k+1)-1個節點

n0表示度為0的節點, n2表示度為2的節點,存在n0 = n2 + 1

對所有樹有:節點個數 = 邊數+1

完全二叉樹規律

節點數為n的完全二叉樹,其高度為 (向下取整),也就是說該樹一共有logn + 1 層。

對於完全二叉樹,若從上至下、從左至右編號,則編號為i的節點,其左孩子節點編號為2i,右孩子節點編號為2i+1,父親節點為i/2;

相關函式實現

#include

#include

#include

#include

using

namespace std;

typedef

char btdatatype;

typedef

struct binarytreenode

btnode;

// 通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹

btnode*

binarytreecreate

(btdatatype* a,

int n,

int* pi)

return

null;}

// 二叉樹銷毀

void

binarytreedestory

(btnode*

* root)

}// 二叉樹節點個數

intbinarytreesize

(btnode* root)

// 二叉樹葉子節點個數

intbinarytreeleafsize

(btnode* root)

// 二叉樹第k層節點個數

intbinarytreelevelksize

(btnode* root,

int k)

}return-1

;}// 二叉樹查詢值為x的節點

btnode*

binarytreefind

(btnode* root, btdatatype x)

return

null;}

// 二叉樹前序遍歷

void

binarytreeprevorder

(btnode* root)

// 二叉樹中序遍歷

void

binarytreeinorder

(btnode* root)

// 二叉樹後序遍歷

void

binarytreepostorder

(btnode* root)

// 層序遍歷

void

binarytreelevelorder

(btnode* root)}}

// 判斷二叉樹是否是完全二叉樹

intbinarytreecomplete

(btnode* root)

return1;

}int

main()

二叉樹 滿二叉樹和完全二叉樹

二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...