关于C语言二叉树的问题

2024-12-02 19:05:37
推荐回答(1个)
回答1:

#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define NULL 0
typedef int status;
typedef struct bitnode{ /*二叉树的结点*/
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
bitree t;
status createbitree(bitree *t) /*按先序次序输入值建立二叉树*/
{
char ch;
scanf("%c",&ch);fflush(stdin);/*清除缓存区里的回车*/
if(ch=='*') *t=NULL;/*这里以星号作为结束标志*/
else{
if(!(*t=(bitnode *)malloc(sizeof(bitnode))))exit(OVERFLOW);
(*t)->data=ch;
createbitree(&((*t)->lchild));
createbitree(&((*t)->rchild));
}
return OK;
}
status visit(char ch) /*对二叉树每个结点元素的访问操作*/
{
printf("%c",ch);
return OK;
} /*你这个visit函数好像没什么作用?可以删掉*/
status preordertraverse(bitree t) /*按先序访问二叉树*/
{
if(t)
{
printf("%c",t->data);
if(preordertraverse(t->lchild))
if(preordertraverse(t->rchild))return OK;
return ERROR;
}else return OK;
}
status jh(bitree t)
{
bitree x;
x=t->lchild;
t->lchild=t->rchild;
t->rchild=x;
return OK;
}
status exchange(bitree t) /*交换二叉树中所有结点的左、右子树*/
{
if(t)
{
jh(t);
if(jh(t->lchild)) /*这里是最重要的地方,你好像写错了吧*/
if(jh(t->rchild))return OK;
return ERROR;
}else return OK;
}
void main()
{
printf("input to create binary tree:\n");
createbitree(&t); /*按先序建立二叉树*/
printf("create ok");/*提示createbitree函数没有出问题*/
exchange(t);/*交换每个结点的左、右子树*/
printf("\n");/*输出一个换行*/
preordertraverse(t); /*按先序访问修改后的二叉树*/
getch();
}
我试过了,可以