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

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

咸弘雅
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

算法说明:

第一次循环:读取字符'('。把 top 设为 0,把 p( NULL)推入栈中,设 k = 1。

第二次循环:读取字符'A'。创建一个新的节点 p,把它数据域设为 'A',并且把它左右子节点设为 NULL。因为这是第一个节点,所以根节点 b 设为 p。

第三次循环:读取字符'('。把top 增加到 1,把 p( 'A' 节点)推入栈中,设 k = 1。

第四次循环:读取字符'B'。创建一个新的节点 p,把它数据域设为 'B',并且把它左右子节点设为 NULL。这个时候,k = 1,所以把栈顶( 'A' 节点)的左子节点设为 p( 'B' 节点)。

第一次循环时,top 的值为 0。
第三次循环后,top 变成 1。
第四次循环时,top 的值为 1。这里没有出错,因为第四次循环时候,top = 1 表示 'A' 节点已经在栈中,所以把 'A' 节点的左子节点设为 'B' 节点。这是对的,因为 'B' 节点确实是 'A' 节点的左子节点。

 类似资料:
  • 广义表:(A(B(,D(E,F)),C)) 按广义表表示二叉树结构生成二叉链表的算法: 第一次循环时top值是多少? 第三次循环后top变成多少? 第四次循环时top值是多少,不应该是等于1吗,但St[0]-lchild被赋的值才是B,这里第四次循环是St[1]-lchild被赋的值是B,出错在哪了? 请帮忙解释每次循环代码的意义,每次循环栈的变化。

  • 如果水平顺序遍历优于rest遍历,那么在二叉搜索树中学习它们有什么用呢? 与顺序遍历和前序遍历相比,级别顺序遍历似乎更容易获取信息。

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

  • 给定一棵二叉树,将其展平为就地的链表。 例如,给定以下树: 被压扁的树应该是这样的: 我对其他解决方案很感兴趣,但我想问,为什么在运行代码时,输出只与输入树匹配。

  • 我正在研究一种递归算法,将二叉树扁平化为单链表。问题陈述: 我写了下面的递归代码,它根本不起作用(返回错误的答案),但我不能从概念上理解为什么不起作用。从根开始,我们拉平根。左根和右根。如果root.left存在,那么root.next(在本例中是root.right)将指向扁平化的left列表。然后,左列表指向右列表的开始。这将沿着树递归地继续下去。 这在概念上有问题吗?我尝试在预序遍历之后对它

  • 第 26 章 链表、二叉树和哈希表 目录 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表