基本概念:
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 採用先序遍歷...