我正在尝试删除BST中的节点的leetcode挑战。我的删除了它,但是返回了一个乱七八糟的树,不知道为什么。
$this->session->sess_destroy();
答案 0 :(得分:1)
您需要修复一些问题,并解决您要删除的节点是根节点的情况。
此外,您需要修复删除节点后更新树的方式。您可能需要考虑一个返回右子树中最小值节点的函数。原型可能看起来像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;
}