#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data; //数据元素
struct node *lchild; //指向左孩子
struct node *rchild; //指向右孩子
} BTNode;
void CreateBTNode(BTNode *&b,char *str) //由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];
}
}
void DestroyBTNode(BTNode *&b)
{
if (b!=NULL)
{
DestroyBTNode(b->lchild);
DestroyBTNode(b->rchild);
printf("%c",b->data);
free(b);
}
}
main()
{
BTNode *b,*p,*lp,*rp;;
CreateBTNode(b,“A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”);
DestroyBTNode(b);
}
以上代码运行后输出:DJLNMKHEBFIGCA
请解释为什么?
这个实验能否说明二叉树成功销毁?
如果能,请调试跟踪程序,理解 参数 &b的变化机理。