gpt4 book ai didi

c - 从 C 中的二叉搜索树中删除节点

转载 作者:行者123 更新时间:2023-11-30 17:25:25 24 4
gpt4 key购买 nike

我想从二叉搜索树中删除节点。这个函数有3个参数。其中一棵树,其他是起始节点和结束节点。我想删除起始节点和结束节点之间的节点。P.S:用户编写起始节点和结束节点,我们将它们用作参数。

我写的代码:

node * removeReviewsBetween(node * tree,double start,double end){
node * newNode;
if(tree==NULL){
return NULL;
}


if(start< tree->scoreNumber){
tree->left=removeReviewsBetween(tree->left,start,end);
}

else if(start > tree->scoreNumber){
tree->right=removeReviewsBetween(tree->right,start,end);
}

else{
if(tree->right && tree->left){
newNode=findMin(tree->right);
tree->scoreNumber=newNode->scoreNumber;
tree->right=removeReviewsBetween(tree->left,tree->scoreNumber,end);
}

else{
newNode=tree;
if(tree->left==NULL){
tree=tree->right;
}
else if(tree->right==NULL){
tree=tree->left;
}
free(newNode);
}

return tree;
}
}

我写了一些东西,但它不能正常工作。请给我一些建议

最佳答案

应该可以了 - 您的代码稍作修改:

node *removeReviewsBetween(node *tree, double start, double end){
node *newNode;
double score;

if(tree==NULL){
return NULL;
}

while (tree->scoreNumber >= start && tree->scoreNumber =< end){ // if head is in the range to delete
if(tree->right){
newNode = findMin(tree->right);
score = newNode->scoreNumber;
removeReviewsBetween(tree, score, score);
tree->scoreNumber = score;
continue;
}

if(tree->left){
newNode = findMax(tree->left);
score = newNode->scoreNumber;
removeReviewsBetween(tree, score, score);
tree->scoreNumber = score;
continue;
}

return NULL; // if the only node left is the head and it's still in the range to delete
}

if(end < tree->scoreNumber){ // if all nodes to delete are in the left subtree
tree->left = removeReviewsBetween(tree->left, start, end);
return tree;
}

else if(start > tree->scoreNumber){ // if all nodes to delete are in the right subtree
tree->right = removeReviewsBetween(tree->right, start, end);
return tree;
}
}

关于c - 从 C 中的二叉搜索树中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078321/

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