二叉树的搜索一般都是研究的二叉搜索树的数据结构,也就是左子树的元素一定小于父节点元素,右子树的元素一定大于父节点的元素。就像下图所示。这种特殊的数据结构可以根据元素数值很快找到某个元素的节点。
但我现在突然想,一个任意的二叉树(如下图),怎样找到特定的元素(比如9)并返回该元素节点的指针呢?
我想用递归的方法从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是要找的元素的值。
还有,如果用非递归的方法的话,又是如何下手呢(思路是什么样的)?
改为下面的代码试试:
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; } }