给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

  1. 首先找到需要删除的节点;
  2. 如果找到了,删除它。

说明: 要求算法时间复杂度为 O(h),h 为树的高度。

示例:

root = [5,3,6,2,4,null,7]
key = 35/ \3   6/ \   \
2   4   7给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。5/ \4   6/     \
2       7另一个正确答案是 [5,2,6,null,4,null,7]。5/ \2   6\   \4   7

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
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;
    }
};

450.删除二叉搜索树中的节点相关推荐

  1. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  2. 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...

  3. leetcode 450. 删除二叉搜索树中的节点 c语言实现

    如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...

  4. 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...

  5. 450. 删除二叉搜索树中的节点

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...

  6. LeetCode 450. 删除二叉搜索树中的节点

    参考 二叉搜索树删除操作 要删除节点有2子节点,找到右子树中最小的节点,将其val值覆盖要删除的节点值,再删除这个最小节点 要删除的节点的子节点为1个或0个,直接将要删除的节点的父节点指向子的子节点 ...

  7. 力扣450. 删除二叉搜索树中的节点(JavaScript)

    var deleteNode = function(root, key) {//没找到if(root==null){return root}//找到了if(root.val==key){//1,没有子 ...

  8. ​LeetCode刷题实战450:删除二叉搜索树中的节点

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. LeetCode450题—— 删除二叉搜索树中的节点

    首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/70 ...

  10. 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例

    一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...

最新文章

  1. linux中用gtk编写的聊天室能运行的,CHAT_ROOM
  2. 写的书太受欢迎怎么办?北大《深度强化学习》重磅开放下载
  3. Windows核心编程 第十九章 DLL基础
  4. c++ explicit 修饰构造函数
  5. Python【每日一问】08
  6. 转软件开发过程中的各种文档
  7. Python编程从入门到实践~操作列表
  8. TV3是马来西亚第一家商营电视台
  9. 介绍个好点的,JAVA技术群
  10. 。。。剑指Offer之——反转链表。。。
  11. Least-Squares Fitting of Two 3-D Point Sets
  12. mysql与sqlyog连接_如何用sqlyog实现远程连接mysql
  13. Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
  14. pythonATM,购物车项目实战5-数据处理层
  15. python如何识别中文_python 判断是否为中文
  16. 数据库——MySQL——完整性约束
  17. 后端springboot、mybatisplus,前端vue-cli3、elementUI、axios,使用阿里巴巴提供的easyExcel导入导出excel表格
  18. 网园网络电视 v1.2 官方
  19. 基于Web开发资料专集
  20. 初见Python与对未来的展望

热门文章

  1. 完整的vue-cli3项目创建过程以及各种配置
  2. Windows下搭建GCC + Eclipse + OpenOCD的ARM开发环境
  3. django1.2中将ManyToManyField呈现为checkbox
  4. C#编程(七)----------命名空间
  5. 修改oracle数据库的编码为utf-8
  6. C# 简单封装一个XML文件读取类
  7. STC学习:导航按键与数字按键综合控制数码管
  8. 鸡兔同笼(一道明显的体现cin和cout运行较慢的特点)
  9. Scikit-Learn (浅谈Kmeans聚类算法)
  10. OpenCV-图像处理(04、图像操作)