C語言實現二叉樹的四種遍歷和求深度與葉子結點個數

2021-10-24 08:18:18 字數 3737 閱讀 8998

構造訪問輸出visit函式

二叉樹的先序遍歷

二叉樹的中序遍歷

二叉樹的後序遍歷

求二叉樹的深度和葉子結點個數

定義順序佇列並初始化

構造佇列相關函式

使用佇列實現二叉樹的層序遍歷

整個專案的完整**

執行效果圖

//定義資料型別

typedef

char elemtype;

//定義乙個鏈式儲存的二叉樹結構

typedef

struct bitnode bitnode,

*bitree;

//根據輸入結點初始化並建立二叉樹

bool createbitree

(bitree &t)

else

t->data = ch;

//生成根結點

printf

("請輸入%c的左子樹:"

, ch)

;createbitree

(t->lchild)

;//構造左子樹

printf

("請輸入%c的右子樹:"

, ch)

;createbitree

(t->rchild)

;//構造右子樹

}return true;

}

//訪問輸出visit函式

void

visit

(bitree t)

//先序遍歷二叉樹t

void

preorder

(bitree t)

}

//中序遍歷二叉樹t

void

inorder

(bitree t)

}

//後序遍歷二叉樹t

void

posorder

(bitree t)

}

//求樹的深度

inttreedeep

(bitree t)

return deep;

}

//求樹葉的個數

intleafcount

(bitree t,

int&num)

leafcount

(t->lchild, num)

;leafcount

(t->rchild, num);}

return num;

}

//定義乙個順序佇列(迴圈佇列)用於層序遍歷

typedef

struct

sqqueue;

//初始化順序佇列

void

initqueue

(sqqueue &q)

//判斷佇列是否為空

bool isempty

(sqqueue q)

//順序佇列出隊操作

bool dequeue

(sqqueue &q, bitree &t)

//層序遍歷二叉樹t

void

levelorder

(bitree t, sqqueue &q)

while

(isempty

(q)== false)

}

//使用鏈實現求二叉樹的先序遍歷、中序遍歷、後序遍歷、樹的深度和樹的葉子結點個數

//使用佇列實現二叉樹的層序遍歷

#include

#include

//佇列的最大長度

#define maxsize 255

//定義資料型別

typedef

char elemtype;

//定義乙個鏈式儲存的二叉樹結構

typedef

struct bitnode bitnode,

*bitree;

//定義乙個順序佇列(迴圈佇列)用於層序遍歷

typedef

struct

sqqueue;

//根據輸入結點初始化並建立二叉樹

bool createbitree

(bitree &t)

else

t->data = ch;

//生成根結點

printf

("請輸入%c的左子樹:"

, ch)

;createbitree

(t->lchild)

;//構造左子樹

printf

("請輸入%c的右子樹:"

, ch)

;createbitree

(t->rchild)

;//構造右子樹

}return true;

}//初始化順序佇列

void

initqueue

(sqqueue &q)

//判斷佇列是否為空

bool isempty

(sqqueue q)

//順序隊列入隊操作

bool enqueue

(sqqueue &q, bitree t)

//順序佇列出隊操作

bool dequeue

(sqqueue &q, bitree &t)

//訪問輸出visit函式

void

visit

(bitree t)

//先序遍歷二叉樹t

void

preorder

(bitree t)

}//中序遍歷二叉樹t

void

inorder

(bitree t)

}//後序遍歷二叉樹t

void

posorder

(bitree t)

}//層序遍歷二叉樹t

void

levelorder

(bitree t, sqqueue &q)

while

(isempty

(q)== false)

}//求樹的深度

inttreedeep

(bitree t)

return deep;

}//求樹葉的個數

二叉樹的實現和四種遍歷

include include using namespace std struct node node newnode int x void insert node root,int x if xdata else void search node root,int x,int newdata s...

二叉樹四種遍歷的例項實現

內容 二叉樹初始化 先序輸入 層序遍歷 非遞迴的佇列方式 先序遍歷 遞迴 中序遍歷 遞迴 後序遍歷 遞迴 include include include include define nodedata char using namespace std typedef struct treenode ...

二叉樹四種遍歷方式

二叉樹的四種遍歷方式 include include using namespace std 二叉樹節點的定義 class treenode 遞迴方式,每個結點只遍歷一次,時間複雜度o 1 遞迴最多呼叫n次,空間複雜度o n 先序 根 遞迴左 遞迴右 void preorder treenode r...