二叉樹的各種遍歷操作

2021-07-10 11:28:09 字數 3607 閱讀 2759

作    者:王鵬 

* 完成日期:2023年 3 月 13 日

* 問題描述:二叉樹的各種遍歷操作

* 輸入描述:以#代替樹的兒子為空,如輸入(abd##fe###cg#h##i##).

* 程式輸出:如**所示

#include#includetypedef struct treenode *bitree;

typedef struct treenode bitnode;

struct treenode;

typedef struct nodestack;

typedef struct nodeqqueue;

typedef struct queuelinkqueue;

//棧函式的宣告

stack *createstack();

int isempty(stack *s);

bitree pop(stack *s);

void push(stack *s, bitree item);

//佇列函式的宣告

void createqueue(linkqueue *q);

int isemptyq(linkqueue *q);

int addq(linkqueue *q, bitree e);

bitree delete(linkqueue *q);

// 樹函式的宣告

bitree creatbitree(); //按先序遍歷建立二叉樹

void preorder_1(bitree t); //先序遍歷(遞迴)

void inorder_1(bitree t); //中序遍歷(遞迴)

void postorder_1(bitree t); //後序遍歷(遞迴)

void preorder_2(bitree bt); //先序遍歷(非遞迴)

void inorder_2(bitree bt); //中序遍歷(非遞迴)

void postorder_2(bitree bt); //後序遍歷(非遞迴)

void levelorder(bitree bt); //層序遍歷(非遞迴)

int depth(bitree t); //計算樹的深度

void coutnode(bitree t); //輸出所有樹的葉節點

int main()

else

printf(" 二叉樹為空!\n");

break;

case 2:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 3:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 4:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 5:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 6:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 7:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 8:

if(t)else

printf(" 二叉樹為空!\n");

break;

case 9:

if(t)else

printf(" 二叉樹為空!\n");

break;

default:

flag = 0;

printf("程式執行結束,按任意鍵退出!\n");

} }

return 0;

} //樹的函式

bitree creatbitree() //建立樹

return t;

}void preorder_1(bitree t) //先序遍歷(遞迴)

} void inorder_1(bitree t) //中序遍歷(遞迴)

}void postorder_1(bitree t) //後序遍歷(遞迴)

} void preorder_2(bitree bt) //先序遍歷(非遞迴)

if(!isempty(s))

}}

void inorder_2(bitree bt) //中序遍歷(非遞迴)

if(!isempty(s))

}}

void postorder_2(bitree bt) //後序遍歷(非遞迴)

while(!isempty(s2))

} void levelorder(bitree bt) //層序遍歷(非遞迴) }

int depth(bitree t) //計算樹的深度

else

return 0;

}void coutnode(bitree t) //輸出所有樹的葉節點

coutnode( t->left );

coutnode( t->right ); }}

//棧的函式

stack *createstack() //建立棧

int isempty(stack *s) //判斷棧是否為空

void push(stack *s, bitree item) //入棧

bitree pop(stack *s) //出棧

else }

//佇列的函式

void createqueue(linkqueue *q) //建立佇列

int isemptyq(linkqueue *q) //判斷佇列是否為空

int addq(linkqueue *q, bitree e) //入佇列

bitree delete(linkqueue *q) //出佇列

二叉樹的各種遍歷

二叉樹 struct treenode void createtree treenode root 樹遞迴先序遍歷 void preorder treenode root 現將根節點入棧,然後以棧空為條件不斷出棧,每齣棧乙個元素,將其右孩子壓入棧,左孩子壓入棧 void nonrecursionpr...

二叉樹及其各種遍歷

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...

二叉樹 各種遍歷演算法

include include include using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return 0 輸出 void visi...