只写了个开头中的开头,因为书上的内容开始有点复杂了,尤其是引用了堆栈,这样不利于专一的对树进行学习,因此我在思考一种最合理的方案来对他进行简化,现在只是对结构体进行了定义,如下:
#include <stdio.h>
#include <stdlib.h>
#define Status int
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
}BitNode, * BiTree;
Status CreateBiTree(BiTree &T);
Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e));
int main(void)
{
system("pause");
}
好短好短对吧,不过书上一个用法是我没有见过的,就是这一句定义:
Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e));
Visit并没有进行定义,但是系统没有报错,说明是系统给出的。
查了下是一个自定义函数的指针,把e传进来的,看的还不是很懂,等明天在学习一下应该会有所了解
照着教材写了下树的生成,怎么都不对,难过!
Status CreateBiTree(BiTree &T)
{
// 按先序输入到二叉树中的值,空格表示空树
// 构造链式二叉树
TElemType ch;
scanf("%c",&ch);
if(ch == '#') T = NULL;
else
{
T = (BitNode *)malloc(sizeof(BitNode));
if(!T) exit(OVERFLOW);
else
{
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
return OK;
}