作 者:王鹏
* 完成日期:2016年 3 月 13 日
* 问题描述:二叉树的各种遍历操作
* 输入描述:以#代替树的儿子为空,如输入(ABD##FE###CG#H##I##).
* 程序输出:如代码所示
#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode *BiTree;
typedef struct TreeNode BiTNode;
struct TreeNode{
char data;
BiTree Left;
BiTree Right;
};
typedef struct Node{
BiTree data;
struct Node *Next;
}Stack;
typedef struct NodeQ{
BiTree data;
struct NodeQ *Next;
}Queue;
typedef struct queue{
Queue *front;
Queue *rear;
}LinkQueue;
//栈函数的声明
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()
{
BiTree T;
int flag = 1, i ;
printf(" 本程序实现二叉树的基本操作。 \n");
printf("可以进行建立二叉树,分别用递归与非递归的算法进行二叉树的3种遍历。 \n");
while(flag){
printf("| |\n");
printf("|**********************************************************************|\n");
printf("| 二叉树的基本操作如下: |\n");
pr