理論基礎 二叉樹 二叉鍊錶

2021-09-24 06:04:11 字數 2166 閱讀 9158

二叉樹一般採用二叉鍊錶儲存,其基本思想是:令二叉樹的每個結點對應乙個鍊錶結點,鍊錶結點除了存放與二叉樹結點有關的資料資訊外,還要設定指示左右孩子的指標。 

templatestruct node;
如圖,乙個二叉鍊錶的儲存結構如下:

templateclass bitree//前序遍歷

void inorder()//中序遍歷

void postorder()//後序遍歷

void levelorder()//層次遍歷

private:

int numnode=0;//二叉樹結點個數

int numleaf=0;//二叉樹葉結點個數

int heighttree=0;//二叉樹的高度

node*root;//指向根節點的頭指標

node*creat();//構造函式呼叫

void release(node*bt);//析構函式呼叫

void countnode(node*bt);//計算二叉樹結點個數

void countleaf(node*bt);//計算二叉樹葉結點個數

int countheight(node*bt);//計算二叉樹的高度

void exchange(node*bt);//交換左右子樹

void preorder(node*bt);//前序遍歷

void inorder(node*bt);//中序遍歷

void postorder(node*bt);//後序遍歷

void levelorder(node*bt);//層次遍歷

};建構函式的功能是建立一棵二叉樹,由於前序、中序、後序三種遍歷方式都無法唯一確定二叉樹的左右子樹情況,因此針對這個問題,可將二叉樹中每個結點的空指標引出乙個虛結點,其值為一特定值,如:" # ",以標識為空。

將經過如上處理的二叉樹稱為原二叉樹的擴充套件二叉樹,通過擴充套件二叉樹的乙個遍歷序列就能唯一確定一棵二叉樹。

理論基礎 二叉樹 二叉樹的遍歷

以二叉鍊錶的儲存結構為例 若二叉樹為空,則空操作,否則 先訪問根結點,再先序遍歷左子樹,然後先序遍歷右子樹 void preorder node bt 若二叉樹為空,則空操作,否則 先中序遍歷左子樹,再訪問根結點,然後中序遍歷右子樹 void inorder node bt 若二叉樹為空,則空操作,...

理論基礎 二叉樹 線索鍊錶

對於乙個有 n 個結點的二叉鍊錶,每個結點指向左右孩子的兩個指標域,故共有 2n 個指標域,而 n 個結點的二叉樹共有 n 1 條分支,即存在 2n n 1 n 1 個空指標域,白白浪費了資源。另一方面,在二叉鍊錶上,只能知道每個結點的左右孩子結點的位址,而不知道某個結點的前驅和後繼,要想知道,必須...

二叉樹 二叉鍊錶

include using namespace std typedef char elemtype int n 0 typedef struct binode binode class bitree bitree binode getroot void preorder binode root 前序...