我们数据结构用C#做,在做二叉树查找时,出现了问题,这里不方便细说,大神能加一下我QQ么?1589525158

解决方案 »

  1.   

    好吧,我这个问题老师也看了好久,没有解决。
    问题代码如下:
      /// <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));
      

  2.   

    可是我输入123**4**5**打印出来的就是
    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的结点作为根的各子树")都实现了