【发布时间】:2022-06-13 18:20:48
【问题描述】:
所以我正在尝试为二叉搜索树创建一个函数,如果您输入一个已经存在的数字,该数字将被添加到左子树,并且左子树被下推一步。
将其可视化
如果我们有一棵看起来像这样的树
5
/ \
3 6
/ \ \
2 4 9
/
1
并在此处插入一个 3,树就变成了
5
/ \
3 6
/ \
3 9
/ \
2 4
/
1
但是在我的代码中发生的是重复后的每个数字都被插入两次,这样结果就变成了
5
/ \
3 6
/ \ \
3 4 9
/
2
/
2
/
1
/
1
下面是我目前的代码。
tree *insert(tree *tree, int data){
if(tree == NULL){
return new(data);
}
if(data > tree->data){
tree->right = insert(tree->right, data);
}
else if(data < tree->data){
tree->left = insert(tree->left, data);
}
else if(data == tree->data){
if(tree->left == NULL){
tree->left = insert(tree->left, data);
}
else if(tree->left != NULL){
struct tree *temp = copy(tree->left);
tree->left->data = data;
tree->left->left = insert(temp, temp->data);
}
}
return tree;
}
感谢您的帮助!
【问题讨论】:
-
您为什么觉得需要复印?这就是你的问题所在。
-
在 BST 中,所有键通常被认为是不同的。 (虽然这是一个硬约束,但可能会对遍历的效率产生负面影响)
标签: c binary-tree binary-search-tree