题目描述:
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST.
Basically, the deletion can be divided into two stages:
1. Search for a node to remove.
2. If the node is found, delete the node.
Note: Time complexity should be O(height of tree).
Example:
root = [5,3,6,2,4,null,7]
key = 3
5
/ \
3 6
/ \ \
2 4 7
Given key to delete is 3. So we find the node with value 3 and delete it.
One valid answer is [5,4,6,2,null,null,7], shown in the following BST.
5
/ \
4 6
/ \
2 7
Another valid answer is [5,2,6,null,4,null,7].
5
/ \
2 6
\ \
4 7
利用递归找到要删除的节点,如果该节点只有左子树或者右子树,那么直接让该节点等于左子树或者右子树,否则就要找到右子树的最小值,将它换到当前节点,然后再在右子树中删除最小值节点。
class Solution {
public:
TreeNode* deleteNode(TreeNode* root, int key) {
if(!root) return NULL;
if(root->val>key) root->left=deleteNode(root->left,key);
else if(root->val<key) root->right=deleteNode(root->right,key);
else
{
if (!root->left||!root->right)
root=(root->left)?root->left:root->right;
else
{
TreeNode *cur=root->right;
while(cur->left) cur=cur->left;
root->val=cur->val;
root->right=deleteNode(root->right,cur->val);
}
}
return root;
}
};
本文介绍了一种在二叉搜索树(BST)中删除指定键值节点的算法。通过递归查找目标节点,根据节点的子树情况,直接替换或调整树结构,确保删除操作后树的BST性质不变。提供了C++实现代码示例。
126

被折叠的 条评论
为什么被折叠?



