二叉樹學習筆記1

2021-09-22 16:27:43 字數 1560 閱讀 9280

基本概念:

1.【根節點】:根節點是乙個沒有雙親結點的結點,一課樹最多只能有乙個根節點;

2.【結點】:樹上面的所有資料都是結點,但結點不只包括資料,還包含指向子樹的分支(位址);

3.【結點的度】:結點擁有子樹或分支的個數;

4.【樹的度】:樹中各結點的最大值;

5.【結點的層數】:根結點的層數為0,其他結點的層數等於其父結點的層數加1;

6.【樹的深度】:樹中所有結點層數的最大值;

7.【樹的高度】:數的深度加1;

8.【葉子結點】:沒有孩子結點的結點;

【概念】:二杈樹是樹型結構的一種特殊形式。其特點:所有結點的度都小於等於2.

【區別】:二杈樹的子樹有左右子樹之分,次序不可顛倒,因此二叉樹是有序樹;

兩種特殊的二杈樹:

1.【完全二杈樹】:一課高度為h的二杈樹,除最後一層以外的其他所有層上的結點數都達到最大值,而最後一層的所有結點分布在該層最左邊的連續位置上。

2.【滿二叉樹】:每一層的結點數都達到最大值。所有分支結點的度都為2,葉子結點都出現在最後一層。高度為h的二叉樹有2^h-1個結點。即:二叉樹中的每個結點恰好有兩個孩子結點且所有葉子結點在同一層。

二叉樹的遍歷:

前序遍歷:根節點----->左子樹----->右子樹

void

preorder

(struct node* p1)

//先序遍歷:根->左->右

}

中序遍歷:左子樹----->根節點----->右子樹

void

inorder

(struct node* p2)

//中序遍歷:左->根->右。

}

後序遍歷:左子樹----->右子樹----->根節點

void

postorder

(struct node* p3)

//後序遍歷:左->右->根。

}

建立乙個簡單的二叉樹並遍歷,**實現:

#include

#include

using namespace std;

struct node

;void

preorder

(struct node* p1)

//先序遍歷:根->左->右

}void

inorder

(struct node* p2)

//中序遍歷:左->根->右。

}void

postorder

(struct node* p3)

//後序遍歷:左->右->根。

二叉樹學習筆記

二叉樹是樹的一種特殊結構,也是一種極為重要的樹,二叉樹最重要的操作是遍歷,即按照一定的順序訪問樹中的所有節點,常見的遍歷方式有 對遍歷來說,最容易想到的方式就是遞迴,遞迴 簡單,但是效率不高,需要的棧空間比較大,非遞迴的方法 較為複雜,不過效率較高。遞迴實現 void preordervisit b...

二叉樹學習筆記

1.訪問根節點 2.在訪問第 l 層時,將 l 1 層的節點按順序儲存到佇列中 3.進入下一層並訪問該層的所有節點 4.重複上述操作直到所有層都訪問完 時間複雜度 o n 空間複雜度o n 最壞的情況下,最後一層的所有節點可能在佇列中 void levelorder node root q.dele...

二叉樹學習筆記

二.遞迴解法 三.非遞迴解法 include using namespace std char ch typedef char elemtype typedef struct bitnodebitnode,bitree 先序序列存入 void createbitree bitree t 採用先序遍歷...