关于二叉树遍历的递归实现

来源:百度知道 编辑:UC知道 时间:2024/06/03 10:14:07
我按照严书上的算法实现了二叉树的遍历,代码如下,没有语法错误,但当我运行的时候发现,在创建树的时候就跳不出去,一直在那里循环,不知道怎么回事,想不通,为什么一直要输入,应该在输入几次后就跳出的,谁能帮着解释一下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10
typedef char TElemType;
typedef int status;

typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

status PrintElement(TElemType e)
{
printf("%d",e);
return OK;
}

status CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}

应该是你输入的时候出错。你输这个试试
ABCD#####

你这个是前序遍历的方法构造二叉树,
输入的时候应该按照前序遍历的顺序构造
例如
aa##a## 三个节点

我把上星期做的给你参考一下。有用就顶一下吧。
PS:你写代码的时候最好写多点注释,方便自己以后阅读,也方便人家阅读。

#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
#define ERROR -1;

typedef struct BitNode{
TElemType data;
struct BitNode *lchild,*rchild;//左右孩子指针
}BitNode,*BitTree;

//按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树
//构造二叉树表表示的二叉树T
void CreateBitTree(BitTree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{ T=(BitNode *)malloc(sizeof(BitNode));
T->data=ch;//生成根结点
CreateBitTree(T->lchild);//构造左子树
CreateBitTree(T->rchild);//构造右子树
}//else
}//CreateBitTree

//访问函数——打印
int visit(TElemType e)
{ printf("%c",e);
return 1;
}//visit

//先序遍历(根->左->右),visit()访问每一个树