+ -
当前位置:首页 → 问答吧 → 按值查找二叉树问题......求帮助

按值查找二叉树问题......求帮助

时间: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;
}

作者: 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]

作者: xiaozhiwei   发布时间: 2011-10-31

非常感谢楼上那位仁兄.....

作者: xiaoou33   发布时间: 2011-10-31

热门下载

更多