给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/delete-node-in-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
刚开始考虑复杂了,简单dfs即可
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* deleteNode(TreeNode* root, int key) {
if (root == nullptr) return nullptr;
if (root->val > key) {
root->left = deleteNode(root->left, key);
return root;
}
if (root->val < key) {
root->right = deleteNode(root->right, key);
return root;
}
if (root->val == key) {
if (root->left == nullptr && root->right == nullptr)
return nullptr;
if (root->left == nullptr) return root->right;
if (root->right == nullptr) return root->left;
TreeNode* next = root->right;
while (next->left) next = next->left;
root->right = deleteNode(root->right, next->val);
next->right = root->right;
next->left = root->left;
return next;
}
return root;
}
};

这篇博客讨论了如何在保持二叉搜索树性质不变的情况下删除给定值的节点。通过深度优先搜索(DFS)策略,实现了在找到目标节点后进行删除操作。当目标节点为叶子节点、只有一个子节点或有两个子节点时,分别采取不同策略进行处理。代码中展示了递归实现的详细过程。
450. 删除二叉搜索树中的节点(中等)&spm=1001.2101.3001.5002&articleId=125109451&d=1&t=3&u=3ec8f6e34dcc47fda891433b7fc40886)
1216

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



