作 者:王鵬
* 完成日期: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...