创建二叉树(CreateBTree):
创建二叉树需要向函数传入一个自然语言格式的二叉树,类似于A(B(D(,G)),C(E,F))
现在将二叉树,以字符串的格式传入函数,让函数以此创建一个二叉树。
首先读取字符串
字符串中有‘(’,‘)’,‘,’,‘元素’,函数依次从前向后读取单个字符:
如果直接读取一个元素,则以该元素创建一个根节点;
如果读取到一个‘(’,则创建一个左孩子节点,‘(’后面的元素为这个节点数据域元素;如果读取到一个‘)’,孩子节点结束,返回上一级结点。
如果读取到一个‘,’,创建一个右孩子节点。
下面看到代码:
void CreateBTree(BTNode * &b,char *str) //创建二叉树
{
BTNode *St[MaxSize],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL; //建立的二叉树初始时为空
ch=str[j];
while (ch!='\0') //str未扫描完时循环
{
switch(ch)
{
case '(':top++;St[top]=p;k=1; break; //为左孩子节点
case ')':top--;break;
case ',':k=2; break; //为孩子节点右节点
default:p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if (b==NULL) //*p为二叉树的根节点
b=p;
else //已建立二叉树根节点
{
switch(k)
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}