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;
}
1条答案
按热度按时间bnl4lu3b1#
因为递归调用的返回值永远不会被使用,初始调用只能返回
NULL
或root
,但不能返回递归调用中的值,你应该返回这些值以在初始调用中获得该值: