首页 新闻 会员 周边

有关任意二叉树元素的搜索,不知道有没有什么好的思路?

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-16 15:49

  二叉树的搜索一般都是研究的二叉搜索树的数据结构,也就是左子树的元素一定小于父节点元素,右子树的元素一定大于父节点的元素。就像下图所示。这种特殊的数据结构可以根据元素数值很快找到某个元素的节点。图一

  但我现在突然想,一个任意的二叉树(如下图),怎样找到特定的元素(比如9)并返回该元素节点的指针呢?

图2

  我想用递归的方法从root遍历整个树,直到找到要找的元素为止,并返回该元素的指针。但返回值最后都会返回递归的最外层的节点,也就是根节点,不知道这里怎么该才好?

  我的函数形式是:

 1 PNode FindElem(PNode ps,int posval)                
 2 {
 3     if(ps == NULL)
 4     {
 5         return;
 6     }
 7     else
 8     {
 9         if(ps->data != posval)
10         {
11             FindElem(ps->lc,posval);
12             if(ps->data != posval)                
13             {
14                 FindElem(ps->rc,posval);
15             }
16         }
17     return ps;
18     }
19 }

ps是开始的节点参数,我想从root开始;posval是要找的元素的值。

  还有,如果用非递归的方法的话,又是如何下手呢(思路是什么样的)?

jszhujun2010的主页 jszhujun2010 | 初学一级 | 园豆:193
提问于:2013-12-01 14:12
< >
分享
最佳答案
-1

改为下面的代码试试:

PNode FindElem(PNode ps,int posval)                
{
    if(ps == NULL)
    {
        return NULL;
    }
    else if (ps->data == posval)
    {
        return ps;
    }
    else
    {
        PNode tmp = FindElem(ps->lc, posval);
        if (tmp != NULL) return tmp;
        tmp = FindElem(ps->rc, posval);
        if (tmp != NULL) return tmp;
        return NULL;
    }
}
收获园豆:10
诶碧司 | 小虾三级 |园豆:1912 | 2013-12-01 17:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册