当前位置: 首页 > 知识库问答 >
问题:

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

杨研
2023-05-17

广义表:(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,出错在哪了?
请帮忙解释每次循环代码的意义,每次循环栈的变化。

共有1个答案

祁博雅
2023-05-17

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

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

image.png

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

 类似资料:
  • 广义表:(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

  • 本文向大家介绍JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例,包括了JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数据结构与算法之二叉树插入节点、生成二叉树。分享给大家供大家参考,具体如下: javascript数据结构与算法-- 插入节点、生成二叉树 二叉树中,相对较小的值保存在左

  • 树是一种非线性的数据结构,以分层的方式存储数据,它对于存储需要快速查找的数据非常有用。 树是一种一对多的数据结构。树又有很多子集,比如:二叉树、二叉搜索树、2-3树、红黑树等等。 现实例子就是公司的组织架构,总裁为树的最顶端叫根节点,各部门按照领导人区分为子树。 在计算机科学中,HTML结构就是典型的树结构 树的节点可以有0个或多个子节点。当一棵树(的所有节点)最多只能有两个子节点时,这样的树被称

  • 上一节讲了 二叉树的顺序存储,通过学习你会发现,其实二叉树并不适合用数组存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用 顺序表存储或多或多会存在空间浪费的现象。 本节我们学习二叉树的 链式存储结构。 图 1 普通二叉树示意图 如图 1 所示,此为一棵普通的二叉树,若将其采用链式存储,则只需从树的根节点开始,将各个节点及其左右孩子使用 链表存储即可。因此,图 1 对应的链式存储结构如图 2

  • 本文向大家介绍JavaScript数据结构之二叉树的遍历算法示例,包括了JavaScript数据结构之二叉树的遍历算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript数据结构之二叉树的遍历算法。分享给大家供大家参考,具体如下: 三种遍历的代码: 最后是实验代码: 树的结构为:                     23            16         

  • 二叉树 : 闲话少说,直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>BST</title> </head> <body> <script> //结点 function Node(data,left,right){ this.data=data; t