问题代码如下:
  /// <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));我的QQ1589525158