给定一个二叉搜索树的根节点 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. 深度学习的发展可能已达极限!
  2. 神经网络知识专题总结!
  3. php框架where条件使用,where条件
  4. Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞
  5. pr如何处理音效_学视频剪辑 PR通关教学课程 教程
  6. MOSS 2010 实现域账户 组员在线交流 Live Chat
  7. 重点客户销售数据分析python_药品销售数据分析--python
  8. html知识笔记(一)——head和body标签
  9. java 写入指定路径文件_java对指定目录下文件读写操作介绍 | 学步园
  10. sed的高级命令和软件包管理器rpm
  11. Nacos内核设计之一致性协议
  12. reg51.h和reg52.h头文件
  13. 30个Java自学网站
  14. Android逆向之旅---Android手机端破解神器MT的内购VIP功能破解教程
  15. 淘宝小程序开发注意点
  16. 吴伯凡-认知方法论-知行合一的本质
  17. 有些歌,放在这慢慢听
  18. c#学习笔记之八 函数的代表delegate的用法:c# 求 三角函数 指数函数 积分
  19. 华为软开云2--玩转代码托管
  20. 让杂牌蓝牙适配器也安装上windows 自带的驱动程序

热门文章

  1. 数据库—并发调度的可串行性
  2. [转] 由Request Method:OPTIONS初窥CORS
  3. Mongodb高级查询【二】
  4. 转自weiphone]在美做开发多年,写给国内apple开发新手的一些心得,无教程
  5. Cocos2d-x开发---改变父节点颜色、透明度影响子节点
  6. What is the Actual Performance of HANA?
  7. Android 虚拟机快捷键
  8. C#常用操作类库一(验证类)
  9. WARN No appenders could be found for logger的解决方法
  10. 链栈的基本操作和实现