bool CreatBTree(BTNode*& T, char str[], int n)//创建二叉树
{
BTNode* seq[MAXSIZE];//用顺序栈seq来保存双亲结点
seq[n] = 0;
BTNode* p=NULL;
int top = 0, flag=0 ;
for (int j = 0; j < n; j++)//遍历str
{
char c = str[j];
if (c == '(') //进栈
{
top++;
seq[top]=p ;
flag = 1; //开始处理左孩子
}
else if (c == ')')//出栈
{
top--;
}
else if (c == ',')//开始处理右孩子
{
flag = 2;
}
else //c为单个字符,创建一个节点p保存该结点值,根据flag值进行操作
{
p = (BTNode*)malloc(sizeof(BTNode));
if (p == NULL)
return false;
p->data = c;
p->lchild = p->rchild = NULL;
if (T == NULL)
T = p;
else if (flag == 1)
seq[top]->lchild = p;
else
seq[top]->rchild = p;
}
}
}