小编给大家分享一下如何实现递归删除二叉树中以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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。