代码-C语言二叉树的节点查找问题(递归方法)

问题描述

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

代码-C语言二叉树的节点查找问题(递归方法)的相关文章

c语言二叉树问题,代码不太理解,求大神解释,急

问题描述 c语言二叉树问题,代码不太理解,求大神解释,急 问题:A Binary Tree is called balanced if, for each node in the tree, the height of its left and right subtrees differ by no more than one. Write a function int height_if_balanced( Tnode *root ) which returns -1 if the tree

求基于单片机如何使用数组存储二叉树各节点数据并随时读取C代码?

问题描述 求基于单片机如何使用数组存储二叉树各节点数据并随时读取C代码? 求基于单片机如何使用数组存储二叉树各节点数据并随时读取C代码? 解决方案 很简单,用数组存储二叉树就是第n层保存在 2^(n-1)~2^n-1的下标区间内.

C语言二分查找算法及实现代码_C 语言

二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列.该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分.接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在,具体的使用方法可通过下面的代码具体了解. #include <stdio.h> binar

SQL 双亲节点查找所有子节点的实现方法_MsSql

怎么保存树状结构的数据呢?在 SQL 中常用的是双亲节点法.创建表如下 CREATE TABLE category ( id LONG, parentId LONG, name String(20) ) INSERT INTO category VALUES ( 1, NULL, 'Root' ) INSERT INTO category VALUES ( 2, 1, 'Branch1' ) INSERT INTO category VALUES ( 3, 1, 'Branch2' ) INSE

malloc-关于c语言二叉树的问题,求大神解答,急

问题描述 关于c语言二叉树的问题,求大神解答,急 这是一段关于二叉树的代码.*list_from_tree这个函数是用来建立二叉树的,但我不太懂它是如何建立二叉树的,求大神详细解释. #include #include typedef struct tnode Tnode; struct tnode{ Tnode *left; Tnode *right; int data; }; Tnode *new_tnode(int data); void print_tree(Tnode *tree, i

SQL 双亲节点查找所有子节点的实现方法

怎么保存树状结构的数据呢?在 SQL 中常用的是双亲节点法.创建表如下 CREATE TABLE category ( id LONG, parentId LONG, name String(20) ) INSERT INTO category VALUES ( 1, NULL, 'Root' ) INSERT INTO category VALUES ( 2, 1, 'Branch1' ) INSERT INTO category VALUES ( 3, 1, 'Branch2' ) INSE

java语言 二叉树(三叉链表存储结构)的深拷贝

问题描述 java语言 二叉树(三叉链表存储结构)的深拷贝 爆炸,这个非递归好复杂,规定不使用栈的非递归,递归都会,非递归就蒙了,有大神能挑战一下吗,急 解决方案 二叉树是一种特殊的数据结构,我们可以对它线性化,方法是,0表示根节点,1 2表示它的子节点,3 4 5 6表示1 2的子节点7 8 9 10 11 12 13 14是再下层-- 很明显,知道一个节点,它的子节点的索引值就是x2+1和x2+2,它的父节点就是-1再整除2. 有了这个知识点,就可以用数组来表示二叉树,也就不用递归和堆栈了.

c语言链表删除节点问题

问题描述 c语言链表删除节点问题 #include #define NUll 0#include struct stu{ char name[6]; int xuehao; int grade; struct stu next;};typedef struct stu STU;main(){ STU *p*p_start*p2*p_print*p_charu*p_charu2; int ixuehao; //输入 for (i=0;i { p=(STU *)malloc(sizeof(STU))

c语言-C语言二叉树中一个二级指针函数问题

问题描述 C语言二叉树中一个二级指针函数问题 static BSTREE_NODE** find(int data, BSTREE_NODE** root){ 39 if(! *root) return root; 40 else if(data == (*root)->data) return root; 41 else if(data < (*root)->data) 42 return find(data,&(*root)->left); 43 else return