按值查找二叉树问题......求帮助
时间:2011-10-31
来源:互联网
用先序遍历建立一颗二叉树,输入x,查找x并输出其左、右孩子。在我写的代码中,输入右子树的结点时,就会出错。
例如输入ABD@F@@EG@@@C@@查找C或G时,就会出错,不知道为什么??
希望路过的朋友帮帮我......谢谢
[code=C/C++][/code]
#include <iostream>
using namespace std;
typedef char datatype;
typedef struct node *pointer;
struct node
{
datatype data;
pointer lchild,rchild;
};
typedef pointer bitree;
bitree PreCreat() //先根序列建立二叉树
{
bitree t;
char ch;
cin> > ch;
if(ch== '@ ') return NULL;
t=new node;
t-> data=ch;
t-> lchild=PreCreat();
t-> rchild=PreCreat();
return t;
}
// 保证所有路径都有返回值。。。
pointer Search(bitree t, datatype x) //在二叉树中查询值为x的节点
{
if(t-> data==x)
return t;
else if (t-> lchild)
return Search(t-> lchild,x);
else if (t-> rchild)
return Search(t-> rchild,x);
return NULL;
}
int main()
{
bitree t;
pointer p;
datatype x;
cout < < "先根建立二叉树,用@表示虚结点: ";
t=PreCreat();
cout < < "输入要查找的值: ";
cin> > x;
p=Search(t,x);
if(p!=NULL)
{
if(p-> lchild==NULL && p-> rchild!=NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其右孩子为: " < <p-> rchild-> data < < ",没有左孩子。 " < <endl;
else if(p-> lchild!=NULL && p-> rchild==NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其左孩子为: " < <p-> rchild-> data < < ",没有右孩子。 " < <endl;
else if(p-> lchild!=NULL && p-> rchild!=NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其左孩子为: " < <p-> lchild-> data < < ",右孩子为: " < <p-> rchild- > data < <endl;
else
cout < < "找到值为 " < <x < < "的结点, " < < "它没有孩子。 " < <endl;
}
else cout < < "没找到 " < <endl;
system( "PAUSE ");
return 0;
}
例如输入ABD@F@@EG@@@C@@查找C或G时,就会出错,不知道为什么??
希望路过的朋友帮帮我......谢谢
[code=C/C++][/code]
#include <iostream>
using namespace std;
typedef char datatype;
typedef struct node *pointer;
struct node
{
datatype data;
pointer lchild,rchild;
};
typedef pointer bitree;
bitree PreCreat() //先根序列建立二叉树
{
bitree t;
char ch;
cin> > ch;
if(ch== '@ ') return NULL;
t=new node;
t-> data=ch;
t-> lchild=PreCreat();
t-> rchild=PreCreat();
return t;
}
// 保证所有路径都有返回值。。。
pointer Search(bitree t, datatype x) //在二叉树中查询值为x的节点
{
if(t-> data==x)
return t;
else if (t-> lchild)
return Search(t-> lchild,x);
else if (t-> rchild)
return Search(t-> rchild,x);
return NULL;
}
int main()
{
bitree t;
pointer p;
datatype x;
cout < < "先根建立二叉树,用@表示虚结点: ";
t=PreCreat();
cout < < "输入要查找的值: ";
cin> > x;
p=Search(t,x);
if(p!=NULL)
{
if(p-> lchild==NULL && p-> rchild!=NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其右孩子为: " < <p-> rchild-> data < < ",没有左孩子。 " < <endl;
else if(p-> lchild!=NULL && p-> rchild==NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其左孩子为: " < <p-> rchild-> data < < ",没有右孩子。 " < <endl;
else if(p-> lchild!=NULL && p-> rchild!=NULL)
cout < < "找到值为 " < <x < < "的结点 " < < ",其左孩子为: " < <p-> lchild-> data < < ",右孩子为: " < <p-> rchild- > data < <endl;
else
cout < < "找到值为 " < <x < < "的结点, " < < "它没有孩子。 " < <endl;
}
else cout < < "没找到 " < <endl;
system( "PAUSE ");
return 0;
}
作者: xiaoou33 发布时间: 2011-10-31
main函数中有点乱,会影响大家看,可能是黏贴上去的时候搞乱的,不好意思!!
作者: xiaoou33 发布时间: 2011-10-31
if(ch== '@ ') return NULL; // 要去掉@后面的空格
另外
[code=C/C++][/code]
pointer Search(bitree t, datatype x) //在二叉树中查询值为x的节点
{
bitree bt = t;
if(t-> data == x)
return t;
if (t-> lchild)
{
bt = Search(t->lchild, x);
if (bt != NULL)
return bt;
}
if (t-> rchild)
{
bt = Search(t-> rchild,x);
if (bt != NULL)
return bt;
}
return NULL;
}
[/code]
另外
[code=C/C++][/code]
pointer Search(bitree t, datatype x) //在二叉树中查询值为x的节点
{
bitree bt = t;
if(t-> data == x)
return t;
if (t-> lchild)
{
bt = Search(t->lchild, x);
if (bt != NULL)
return bt;
}
if (t-> rchild)
{
bt = Search(t-> rchild,x);
if (bt != NULL)
return bt;
}
return NULL;
}
[/code]
作者: xiaozhiwei 发布时间: 2011-10-31
非常感谢楼上那位仁兄.....
作者: xiaoou33 发布时间: 2011-10-31
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28