二叉樹的性質

2022-02-15 23:12:47 字數 1738 閱讀 9818

\(二叉樹的每個節點最多只有 2 個子樹 (不存在度 >2 的節點) 有左右之分,不可以顛倒\)

\(二叉樹的第 i 層最多有 2^個結點\)

\(設二叉樹的深度為 k 則: 二叉樹最多有 2^-1 個結點\)

\(對任何一棵二叉樹 t ,設其葉節點數為 n_ 其度為 2 的結點個數為 n_ 則:n_ = n + 1\)

滿二叉樹:

滿二叉樹示意圖

$深度為 k 且有 2^-1 個結點,就是一棵滿二叉樹,滿二叉樹的每一層都是滿的$

完全二叉樹:

完全二叉樹示意圖

$除最後一層外,其他層都是滿的,或在右邊連續缺少若干結點,就是一棵完全二叉樹,設有 n 個結點的完全二叉樹的深度為log_(n+1)$

$深度為 k 的完全二叉樹,至少 2^ 個結點,最多 2^-1 個結點$

二叉搜尋樹:

二叉搜尋樹示意圖

排序二叉樹有如下性質

- $若左子樹不空,則左子樹上所有節點均小於根節點的值$

- $若右子樹不空,則右子樹上所有節點均大於根節點的值$

- $左右子樹也都是二叉搜尋樹$

- $二叉搜尋樹可以為空樹$

- 先序遍歷

$先序遍歷是指先訪問根節點,再依次訪問左子樹和右子樹$

- 中序遍歷

$中序遍歷是指先訪問左子樹,再依次訪問根節點和右子樹$

- 後序遍歷

$先序遍歷是指先訪問左子樹和右子樹,最後再訪問根節點$

- 層次遍歷

$跟「擴充套件式廣度優先搜尋(俗稱「廣搜」)相同」$

int son[n][2], root;

vectorv1, v2, v3, v4;

//先序遍歷

void preorder(int u)

//中序遍歷

void inorder(int u)

//後序遍歷

void postorder(int u)

//層次遍歷

void levelorder()

} ```

## 根據遍歷結果復原二叉樹:

注意!先序遍歷和後序遍歷不能確定唯一的二叉樹!

對於先序遍歷和中序遍歷,我們只需在先序遍歷中確定根節點,並且靠中序遍歷找出其位置,再依次還原左子樹和右子樹,即可確定二叉樹。

對於後序遍歷和中序遍歷,也可按照同樣的方法進行還原,確定唯一的二叉樹。

```cpp

// a陣列為中序遍歷,b陣列為先序遍歷

// x1、y1為當前子樹在a陣列中下標的範圍,x2為前子樹在b陣列中下標的起點

int a[n], b[n], son[n][2];

void dfs(int x1, int y1, int x2)

int len1 = pos - x1, len2 = y1 - pos; // 在中序遍歷裡確定當前子樹的左子樹和右子樹大小

if (len1 > 0)

if (len2 > 0)

}

二叉樹性質

1.在二叉樹的第i層上最多有2i 1 個節點 i 1 用歸納法證明 歸納基 i 1 層時,只有乙個根結點,2i 1 20 1 歸納假設 假設i k時,命題成立 歸納證明 二叉樹上每個結點至多有兩棵子樹,則 第 k 1 層的結點數 最多為2k 1 x 2 2k 1 1 2.二叉樹中如果深度為k,那麼最...

二叉樹性質

二叉樹有以下幾個性質 todo 上標和下標 性質1 二叉樹第i層上的結點數目最多為2 i 1 性質2 深度為k的二叉樹至多有2 1個結點 k 1 性質3 包含n個結點的二叉樹的高度至少為log2 n 1 性質4 在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0 n2 1。2....

二叉樹性質

1 第n層 n 1 上至多有2 n 1 個節點。第一層為 1 2 0 第二層為 2 2 1 第三層為 4 2 2 第i層為 2 n 1 2 深度為k時,至多有2 k 1個節點 k 1 由 1 可知用等比數列前n項和求出。3 具有n個節點的完全二叉樹的深度為k log n 1.k層完全二叉樹,就是前 ...