📄 twol.cpp
字号:
#include<stdio.h>
#include <stdlib.h>
#define ok 1
#define OVERFLOW -2
#define error 0
typedef struct Bnode
{
int data;
struct Bnode *lchild;
struct Bnode *rchild;
}Bnode,* Btree;
int creatBtree(Btree &P)
{
int data;
scanf("%d",&data);
if(data==0)
P=NULL;
else
{
if(!(P =(Bnode*)malloc(sizeof(Bnode))))
exit(OVERFLOW);
P->data = data;
creatBtree(P->lchild);
creatBtree(P->rchild);
}
return ok;
}
int print(int a)
{
printf("%d\n",a);
return ok;
}
void preorder(Btree P,int k)
{
if(P)
{
int i;
for(i=0;i<=k;i++)
printf(" ");
printf("%d\n",P->data);
k=k+2;
preorder(P->lchild,k);
preorder(P->rchild,k);
}
}
int inorder(Btree P,int(*visit)(int a))
{
if(P)
{
if(inorder(P->lchild,visit))
if(visit(P->data))
if(inorder(P->rchild,visit))
return ok;
return error;
}
else
return ok;
}
int postorder(Btree P,int(*visit)(int a))
{
if(P)
{
if(postorder(P->lchild,visit))
if(postorder(P->rchild,visit))
if(visit(P->data))
return ok;
return error;
}
else
return ok;
}
int DestroyBtree(Btree P,int (*visit)(Btree))
{
if(P)
{
if(DestroyBtree(P->lchild,visit))
if(DestroyBtree(P->rchild,visit))
if(visit(P))
return ok;
return error;
}
else
return ok;
}
int Destroy(Btree P)
{
free(P);
return ok;
}
void disBtree(Btree P)
{
// int data;
if(P!=NULL)
{
printf("%d",P->data);
if (P->lchild!=NULL || P->rchild!=NULL)
{
printf("(");
disBtree(P->lchild);
if(P->rchild!=NULL)
printf(",");
disBtree(P->rchild);
printf(")");
}
}
}
void menu(Btree P)
{
int x;
printf("\n\n请输入选项:\n");
printf("1. 先序遍历树并输出\n");
printf("2. 中序遍历树并输出\n");
printf("3. 后序遍历树并输出\n");
printf("4. 销毁树\n");
printf("5. 退出\n");
printf("您的选择是(1~5):");
scanf("%d",&x);
int k=1;
switch(x)
{
case 1 : printf("\n结果如下:\n"); preorder(P,k); menu(P);break;
case 2 : printf("\n结果如下:\n"); inorder(P,print); menu(P);break;
case 3 : printf("\n结果如下:\n"); postorder(P,print); menu(P);break;
case 4 : printf("\n已销毁\n"); DestroyBtree(P,Destroy); break;
case 5 : exit(0);
}
}
void main()
{
void menu(Btree);
void disBtree(Btree P);
int DestroyBtree(Btree P,int (*visit)(Btree));
void preorder(Btree P,int k);
int inorder(Btree P,int(*visit)(int a));
int postorder(Btree P,int(*visit)(int a));
int creatBtree(Btree &P);
int print(int a);
printf("***********************************欢迎使用************************************\n\n");
printf("请按先序输入二叉树结点的数值(0表示左右子树为空),用回车隔开:\n");
Btree P;
creatBtree(P);
printf("\n您输入的树为(先序):\n");
disBtree(P);
printf("\n");
menu(P);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -