???????^O^~ 2021-08-25 11:59 采纳率: 88.9%
浏览 50
已结题

将元素b添加到二叉树T中作为结点p的左孩或右孩

用语言描述过程如下:
申请新结点x,x->Data=b; x->Lchild=0; x->Rchild=0
如果T==0,则T = x;
如果p!=0且是添加左孩,则p->Lchild = x;
如果p==0,则从p=T开始,寻找p->Lchild==0的结点p,令 p->Lchild = x;
如果p!=0且是添加右孩,则p->Rchild = x;
如果p==0,则从p=T开始,寻找p->Rchild ==0的结点p,令 p->Rchild = x;
**疑问:为什么要分析p是否等于零?p==0的话,按照上述说法,从p=T开始,寻找p->Lchild==0的结点p,是不是添加的就是整个树的左孩?
**
代码如下:

void Setuptree(struct Treenode **T, int b,  struct Treenode *p, int tag )
{    struct Treenode *x;
    x=(struct Treenode *) malloc(sizeof(struct Treenode));
    x->Data = b; x->Lchild = 0;  x->Rchild = 0;
    if ((*T)==0) (*T)=x;
    else if (p != 0)
       {  if (tag==0) { x->Lchild = p->Lchild;  p->Lchild = x; } 
          else { x->Rchild = p->Rchild; p->Rchild = x;  }
       }
    else  if (tag==0)
    {  p = (*T);
       while (p->Lchild !=0) p=p->Lchild;
       p->Lchild = x;
    }
    else  { p = (*T); 
                  while (p->Rchild !=0) p=p->Rchild;
               p->Rchild = x;
                }
}

疑问:tag是用来做什么的?x->Lchild = p->Lchild; 这句的意思是不是将p的左孩作为x的左孩?那为什么又有 p->Lchild = x;?而且x->Lchild = p->Lchild这样的话p和x是不是就是同一个结点了?

问题有点多,求解答

  • 写回答

1条回答 默认 最新

  • orange4reg 2021-08-25 13:57
    关注

    看你说的没看明白,不过代码我看明白了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常