问题描述
- C语言二叉树的节点查找问题(递归方法)
-
用的递归的方法查找元素 有点类似于二叉树建立
代码如下struct node *search(struct node *n,int v){//查找 struct node *p; p=n; if(p->value==v){//找到 return p; } else if(v<p->value){//左边部分查找 if(p->left==NULL) return NULL;//未找到 else{ p=p->left; search(p,v); } } else{//v>p->value,右边部分查找 if(p->right==NULL) return NULL;//未找到 else{ p=p->right; search(p,v); } } }
main方法中:point=search(root,20);
用这种方法 总是返回根节点的值 而不是要查找的值或者null
解决方案
在左边和右边部分查询的if里你漏了return,应该是:
return search(p, v);
而不是
search(p,v);
解决方案二:
不是直接这样就好了,搞那么复杂干嘛
status search(ptree t,ptree &p,char ch)
{
if(t == NULL)
return !OK;
if (t->data == ch) {
p = t;
return OK;
}
if(!search(t->lchild,p,ch))
search(t->rchild, p, ch);
}
解决方案三:
不是直接这样就好了,搞那么复杂干嘛
status search(ptree t,ptree &p,char ch)
{
if(t == NULL)
return !OK;
if (t->data == ch) {
p = t;
return OK;
}
if(!search(t->lchild,p,ch))
search(t->rchild, p, ch);
}
解决方案四:
因为你需要修改指针的地址,所以你需要用二级指针
struct node *search(struct node **n,int v)
struct node **p;
参考这个代码
int
Search_data(TreeNode *t,TreeNode **p,TreeNode **q, elemtype x)
{
int flag=0;
*p=NULL;
*q=t;
while(*q)
{
if (x>(*q)->data)
{
*p=*q;
*q=(*q)->Rchild;
}
else{
if (x<(*q)->data)
{
*p=*q;
*q=(*q)->Lchild;
}
else{
flag=1;
break;
}
}
}
return flag;
}
时间: 2024-12-09 02:52:10