C语言 在二叉树中搜索的问题

dgenwo3n  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(112)

tree visualization & test data
我试图通过搜索新节点应该链接到的节点来向二叉树添加节点,有时如果我只继续去往左分支或者去往右分支,则我的函数工作,如果我已经向左分支添加了节点,然后试图向右分支添加节点,则我的函数找到右节点,但是return root不被触发,并且递归继续直到根为NULL;
我在Ubuntu上使用GCC,如果它与此有关的话。

    • 以下是我的代码:**
tree* find_node(tree *root, unsigned int index){
    if(root==NULL){
        return NULL;
    }else if(root->value==index){
        return root;

    }else if(root->value<=index){
        find_node(root->left, index);
    }else if(root->value>index){
        find_node(root->right, index);
    }
}

void create_node_link(tree **root, int value, int index, int link_type){
    tree *new_node=malloc(sizeof(tree));
    if(new_node!=NULL){
        new_node->left=NULL;
        new_node->right=NULL;
        new_node->value=value;
    }

    tree *position=find_node(*root, index);
    if(position==NULL){
        printf("NOT FOUND");
        getch();
        return;
    }

    if(link_type==1)
        link_left(position, new_node);
    else if(link_type==2)
        link_right(position, new_node);
    viz_tree(*root);
}

我只是不明白为什么return root不终止函数。
我的树以如下方式存储:

typedef struct my_tree tree; // in the header file

那么在header_name. c中,结构体如下所示:

struct my_tree{
unsigned int value;
tree *left;
tree *right;

};

    • 根目录按以下方式初始化:**
tree *root=create_node(1); //in the main program

tree *create_node(int value){ //function in header.c file
 tree* result=malloc(sizeof(tree));
  if(result!=NULL){
    result->left=NULL;
    result->right=NULL;
    result->value=value;
  }
return result;
}
bnl4lu3b

bnl4lu3b1#

因为递归调用的返回值永远不会被使用,初始调用只能返回NULLroot,但不能返回递归调用中的值,你应该返回这些值以在初始调用中获得该值:

tree* find_node(tree *root, unsigned int index) {
    if (root == NULL) {
        return NULL;
    } else if (root->value == index) {
        return root;
    } else if (root->value < index) {  // can never be equal, so < over <=
        return find_node(root->left, index);
    }
    return find_node(root->right, index);  // no if needed
}

相关问题