关于数据结构的一道题:试写出中序遍历二叉树的递归和非递归程序并调试。

2024-11-15 18:33:48
推荐回答(1个)
回答(1):

//可以啊。如输入ABC###D## 输出CBAD
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;// 左、右孩子指针
}BiTNode, *BiTree;
int CreateBiTree(BiTree &T){
// 按中序输入二叉树中结点的值(一个字符),#字符表示空树
// 构造二叉链表表示的二叉树T。
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else {
if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
CreateBiTree(T->lchild);
T->data=ch;// 生成根结点
CreateBiTree(T->rchild);
}
return 0;
}
void InTraverse(BiTree &T)
//中序遍历
{
if(T){ //非空二叉树
InTraverse(T->lchild); //递归遍历左子树
printf("%c",T->data); //访问D
InTraverse(T->rchild); //递归遍历右子树
}
}
int main(){
BiTree T;
CreateBiTree(T);
InTraverse(T);
return 0;
}