gpt4 book ai didi

c - BST程序中的 `root`有什么问题?

转载 作者:行者123 更新时间:2023-11-30 14:56:57 26 4
gpt4 key购买 nike

我了解了BST在C中的实现。

这是代码:

#include <stdio.h>
#include <stdlib.h>

struct tree{
int data;
struct tree *left;
struct tree *right;
};


struct tree *newnode(int );
struct tree *insert(int , struct tree *);
void inorder(struct tree *);

int main(){

struct tree *root = NULL;
root = insert(5, root);
root = insert(3, root);
root = insert(4, root);
root = insert(2, root);
root = insert(7, root);
root = insert(6, root);
root = insert(8, root);
root = insert(9, root);



printf("\nInorder Traversal : \n");
inorder(root);

return 0;
}

struct tree *newnode(int data){
struct tree *new = (struct tree *)malloc(sizeof(struct tree));

new->data = data;
new->left = NULL;
new->right = NULL;

return new;
}

struct tree *insert(int data, struct tree *root){
if(!root){
printf("For %d\n",data);
root = newnode(data);
}

else if(root->data >= data ){ /* Push this into left subtree */
printf("Else if : For %d\n",data);
root = insert(data, root->left);
}

else{ /* Push this into left subtree */
printf("Else : For %d\n",data);
root = insert(data, root->right);
}
return root;
}

void inorder(struct tree *root){
if(root){
inorder(root->left);
printf(" %d",root->data);
inorder(root->right);
}
}

每当我运行该程序时,我都不会得到所需的输出。也就是说,上面的代码应该打印如下内容:

1 2 3 4 5 6 7 8 9

但它打印 9,就是这样。

我已经彻底检查了代码,遍历了所有可能的极端情况,对我来说似乎很好。

递归函数insert看起来很完美。但是,不知何故,root 指针始终指向最后插入的节点。

你能指出错误吗?从过去 1 小时以来我一直在尝试。

最佳答案

感谢@Someprogrammerdude 的指出。

insert 函数中,我应该这样做:

struct tree *insert(int data, struct tree *root){
if(!root){
root = newnode(data);
}

else if(root->data >= data ) /* Push this into left subtree */
root->left = insert(data, root->left);

else /* Push this into left subtree */
root->right = insert(data, root->right);

return root;
}

因此,root->leftroot->right 对于赋值非常重要。

关于c - BST程序中的 `root`有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com