按广义表表示二叉树结构生成二叉链表的算法问题?

广义表:(A(B(,D(E,F)),C))

按广义表表示二叉树结构生成二叉链表的算法:

BinTNode CreateTree (char str) {
    //str为存储广又表的字符串的指针
    BinTNode *St [100];
    //用指针数组模拟栈
    BinTNode *p=NULL;
    int top, k, j=0;
    top=-1;
    //置空栈
    char ch=str[j];
    BinTNode *b=NULL;
    while (ch!='\0') {
        //循环读广义表字符串中字符
        switch (ch) {
            case ' (':
                top++;
                St[Top]=p;
                k=1;
                break;
            case ') ':
                top--;
                break;
            case ',':
                k=2;
                break;
            default:
                p=(BinTNode *) malloc(sizeof (BinTNode));
                p->data=ch;
                p->lchild=p->rchild=NULL;
                if (b==NULL)
                    b=p;
                else {
                    switch (k) {
                        case 1:
                            St[top]->lchild=p;
                            break;
                        case 2:
                            St[top]->rchild=p;
                            break;
                     }
                }
        }
        j++;
        ch=str[j];
        return b;
    }
}

第一次循环时top值是多少?
第三次循环后top变成多少?
第四次循环时top值是多少,不应该是等于1吗,但St[0]-lchild被赋的值才是B,这里第四次循环是St[1]-lchild被赋的值是B,出错在哪了?
请帮忙解释每次循环代码的意义,每次循环栈的变化。

阅读 2k
1 个回答

原题目代码没排版太乱了,帮你整理了一下,但似乎 break 的数量还有花括号的数量都不成对儿,不知道是不是你完整的代码。

不过你这里 switch 判断的真的对么……

image.png

这咋前后还各有一个空格?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏