[英]Deleting a node from binary search tree error?
我正在嘗試刪除BST中的節點的leetcode挑戰。 我的刪除了它,但是返回了一個亂七八糟的樹,不知道為什么。
struct TreeNode* deleteNode(struct TreeNode* root, int key) {
if (root == NULL){return root;}
else if(root->val == key){return root;}
if(key < root->right->val){
if( key == root->left->val){
root->left = root->left->left;
}
else{
deleteNode(root->left, key);
}
}
else if( key < root->left->val){
if ( key == root->right->val){
root->right = root->right->right;
}else{
deleteNode(root->right, key);
}
}
return root;
}
您需要修復一些問題,並解決您要刪除的節點是根節點的情況。
此外,您需要修復刪除節點后如何更新樹。 您可能需要考慮一個返回右子樹中最小值節點的函數。 原型可能類似於Node *minValueNode(Node *root)
。
然后,當刪除具有兩個子節點的節點時,將其替換為其右子樹中的最小值節點。
考慮以下處理存儲字符串的節點的實現:
TreeNode *removeWord(TreeNode *tree, char* word){
if(tree == NULL) return tree;
if(strcmp(tree->word, word) > 0 ){
tree->left = removeWord(tree->left, word);
}
else if(strcmp(tree->word, word) < 0){
tree->right = removeWord(tree->right, word);
}
else{
if(tree->left == NULL){
TreeNode *temp = tree->right;
free(tree);
return temp;
}
else if(tree->right == NULL){
TreeNode *temp = tree->left;
free(tree);
return temp;
}
/* Smallest Node in the right subtree */
TreeNode *temp = minValueNode(tree->right);
tree->word = temp->word;
tree->pos = temp->pos;
tree->right = removeWord(tree->right, temp->word);
}
return tree;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.