二叉排序树,结点删除的问题,折腾很久了,求解脱

wenhuo1991 2013-04-09 09:38:19
vs2010



#include<iostream>
using namespace std;

static int i = 1;
struct Node //结点定义
{
int ch;
Node* lchild;
Node* rchild;
};


void insertBST(Node *&t,int key)
{
if(t == NULL)
{
t = new Node;
t->ch = key;
t->lchild = NULL;
t->rchild = NULL;
}
else
if(key < t->ch)
insertBST(t->lchild,key);
else
insertBST(t->rchild,key);
}

Node* searchBST(Node* tree,int key)
{
if(NULL == tree||key == tree->ch)
return tree;
if(key < tree->ch)
searchBST(tree->lchild,key);
else
searchBST(tree->rchild,key);
}


void deleteNode(Node *&p) //删除结点
{
Node* temp = new Node;
if(NULL == p->rchild) //根据主程序的测试用例,这块好像就有问题,但一直没弄明白
{
temp = p;
p = p->lchild;
delete temp;
cout<<"删除了!\n";
}
else
if(NULL == p->lchild)
{
temp = p;
p = p->rchild;
delete temp;
}
else
{
Node* track = new Node;
track = p;
temp = p->lchild;
while(NULL != temp->rchild)
{
track = temp;
temp = temp->rchild;
}
p->ch = temp->ch;
if(track == p)
track->lchild = temp->lchild;
else
track->rchild = temp->lchild;
delete temp;
}
}
void show(const Node* Tree) //先序遍历
{
if(Tree != NULL)
{
cout<<i++<<'\t'; //作为调试信息
show(Tree->lchild);
cout<<Tree->ch<<'\t';
show(Tree->rchild);
}
}


int main()
{
int buf[7] ={8,4,2,6,7,1,3};
Node *tree = NULL;
for(int i = 0;i < 7;i ++)
insertBST(tree,buf[i]);
//show(tree);
//cout<<endl;
Node *tmp = searchBST(tree,1);
cout<<tmp->ch<<endl;

deleteNode(tmp);
show(tree); //这里报错说,访问冲突,应该是上面结点删除的问题吧
return 0;
}



求大神,求解脱,搞了老久了!
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenhuo1991 2013-04-09
  • 打赏
  • 举报
回复
先谢谢啦!我也是觉得删除这里错了,但不知道为什么错,看了资料也没找到原因,伤了。
tonforce 2013-04-09
  • 打赏
  • 举报
回复

deleteNode(tmp);
show(tree);                  //这里报错说,访问冲突,应该是上面结点删除的问题吧
// 程序没细看,但看你在show(tree);之前搞了下deleteNode(tmp),估计是这个搞坏事了,你把
// deleteNode(tmp)这行注释掉,看看情况怎么样。
// 没细看,哥们,要是我说错了,别大口喷我,小口喷能接受,呵呵。

64,648

社区成员

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

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