用C语言写··

jw634595253 2010-10-28 09:46:42
用算法实现删除所有以元素x为根的子树 急!!!
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jefferyyangkai 2010-11-01
  • 打赏
  • 举报
回复
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;

struct tree
{
tree *leftTree;
tree *rightTree;
int num;
};

//生成一棵树,返回树的头指针
tree *initTree()
{
return NULL ;
}

//递归的调用删除左右子树
void delTree(tree *head)
{
if (head==NULL)
{
return;
}
if (head->leftTree!=NULL)
{
delTree(head->leftTree);
delete head->leftTree;
}

if (head->rightTree!=NULL)
{
delTree(head->rightTree);
delete head->rightTree;
}
}

//传入头指针和要找的int值,递归调用这个函数自己,
tree *findAndDel(tree *head,int tarNum)
{
if (head==NULL)
{
return NULL;
}
if (head->num==tarNum)//找到了,删除头指针的所有子树
{
return head;
delTree(head);
}
else//没找到,广度优先继续需找
{
if (head->leftTree!=NULL)findAndDel(head->leftTree,tarNum);
if (head->rightTree!=NULL)findAndDel(head->rightTree,tarNum);
}
}

int main()
{
tree *head= initTree();
int i;
cin>>i;
head=findAndDel(head,i);
}


modyaj 2010-10-28
  • 打赏
  • 举报
回复
先比较树根中的数和x相等不 相等就删除 后面的就没机会考虑了 否者就递归 就算树中有很多x 也最多只删除两次 就是左边一次右边一次
AlanBruce 2010-10-28
  • 打赏
  • 举报
回复
看看。。
jw634595253 2010-10-28
  • 打赏
  • 举报
回复
用编程写出来好吗?我知道意思,但具体编程不会啊····
jefferyyangkai 2010-10-28
  • 打赏
  • 举报
回复
这个用广度优先遍历+对左右子树的递归调用就可以了。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧