如何实现递归删除二叉树中以x为根的子树-创新互联

小编给大家分享一下如何实现递归删除二叉树中以x为根的子树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

为东兴等地区用户提供了全套网页设计制作服务,及东兴网站建设行业解决方案。主营业务为成都网站建设、网站建设、东兴网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

名称:删除二叉树中以x为根的子树

说明:此程序的大部分内容,注释都解释的较为详细了。在这里需要提及一点的是此处递归函数flag传递的不是上篇中讲的引用,而是普通的变量,因为在向下传递参数(当前结点是否是x的信息)的过程中只要传递给对应的子树,并不需要传递给整个树的结点。在下一篇会做个关于递归传递参数的总结。

//递归删除二叉树中以x为根的子树,(flag为标志)
int DelRoot_x(BiTree &T, int x,int flag)
{
  if(T == NULL)
    return 0;
  else
  {
    if(T->data == x)  //如果当前节点的值为x,则更改标志位,在下面将向递归子函数中传递flag值
    {
      flag = 1;
    }
    int lef_ret = DelRoot_x(T->lchild,x,flag); //递归左子树,lef_ret为从左子树中返回的信息
    int rig_ret = DelRoot_x(T->rchild,x,flag); //递归右子树,rig_ret为从右子树中返回的信息
    if(1 == flag)    //如果标志为1,说明其祖父结点中有x,也就是说当前结点需要删除
    {
      if(T->data == x)  //如果是x结点,则需要向上层结点传递信息,以便其父节点将对应的指针域赋空
        return 1;
      delete T;
    }
    else
    {
       if(1 == lef_ret)  //从子结点接受收的信息,即如果其子结点为x,需要将其指针域赋空
        T->lchild = NULL;
      if(1 == rig_ret )  //从子结点接受收的信息,即如果其子结点为x,需要将其指针域赋空
        T->rchild = NULL;
    }
  }
  return 0;
}

以上是“如何实现递归删除二叉树中以x为根的子树”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文题目:如何实现递归删除二叉树中以x为根的子树-创新互联
分享URL:https://www.cdcxhl.com/article44/cogcee.html

成都网站建设公司_创新互联,为您提供定制开发全网营销推广网页设计公司品牌网站建设企业建站标签优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设