我们数据结构用C#做,在做二叉树查找时,出现了问题,这里不方便细说,大神能加一下我QQ么?1589525158
解决方案 »
- 求助关于 Quota 使用空间的问题
- socket "在其上下文中 该请求的地址无效。"
- 怎么用在winform中将数据添加到word中?
- 求助:c#中执行存储过程的方法
- vs2008中的.sdf(数据库文件)是什么意思,怎么用?
- 问题有难度,高手请进,解决在加100!
- winform中使用webBrowser的session问题
- 在关键字 'User' 附近有语法错误
- <a target="_self" href=Replybbs.aspx?ID=<%response.write(request.querystring("ID"))%> >不能编译,请指点迷津嘛
- 在C# 项目中,怎么样获取到天气的相关信息
- dataGridView列的只读属性不起作用
- C#做二叉树查找出现问题,老师也看了好久没解决,恳请各位大神帮一下小弟!
问题代码如下:
/// <summary>
/// 查找值为value的结点
/// </summary>
/// <param name="root">根结点</param>
/// <param name="value">要查找的结点</param>
/// <returns>找到的结点</returns>
public Node<T> SearchMatter(Node<T> root, T value)
{
Node<T> p = root;
if (p == null)
{
Console.WriteLine("n");
return null;
}
if (p.data.Equals(value))//
{
Console.WriteLine("a");
return p;
}
else if (p.lChild != null)
{
return SearchMatter(p.lChild, value);
}
else if (p.rChild != null)
{
return SearchMatter(p.rChild, value);
}
else
return null;
/* Node<T> t = root;
if (t == null)
return null;
else
{
if (t.data.Equals(value))
return t;
else
{
Node<T> p = SearchMatter(t.lChild, value);
if (p.data.Equals(value))
return p;
else
return SearchMatter(t.rChild, value);
}
}*/
}
上边那个是定义在二叉树类里的一个函数成员,用于查找二叉树中的元素 /// <summary>
/// 先序方式创建二叉树
/// </summary>
/// <param name="p">根节点</param>
static void CreateBiTree(ref Node<string> p)
{
string str = Console.ReadLine();
if (str == "*")
p = null;
else
{
p = new Node<string>(str);
CreateBiTree(ref p.lChild);
CreateBiTree(ref p.rChild);
}
}
这是以先序方式创建二叉树主函数是这样用的:
LinkBiTree<string> lbt = new LinkBiTree<string>();
Console.Write("\n按先序遍历所得序列输入,当某结点左子树或右子树为空时,输入‘*’号(如123**4**5**)");
CreateBiTree(ref lbt.head);
查找出了问题,比如以123**4**5**创建二叉树,查找4这个结点就找不到,也就是*前的可以找到,后边的找不到,老师也看不出来问题出在哪?恳请大家帮忙看看!
Console.WriteLine("\n请输入要查找的值");
string val;
val= Console.ReadLine();
/*if (lbt.SearchMatter(lbt.head, val) != null)
Console.WriteLine("相应结点已找到");
else
Console.WriteLine("相应结点未找到");*/
Console.WriteLine(lbt.SearchMatter(lbt.head, val));
1
L2
L3
R4
R5
啊,而且别的功能
<2>.以凹入方式打印输出一棵二叉树\n<3>.二叉树判空");
Console.WriteLine("<4>.计算二叉树中叶子结点的数目");
Console.WriteLine("<5>.在二叉树中查找值为value的结点");
Console.WriteLine("<6>.求位于先序序列中第k个位置的结点的值");
Console.WriteLine("<7>.输出按层次遍历的结点序列");
Console.WriteLine("<8>.删除二叉树中以元素值为x的结点作为根的各子树")都实现了