Leetcode--450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
说明: 要求算法时间复杂度为 O(h),h 为树的高度。
示例:
root = [5,3,6,2,4,null,7]
key = 3
5
/ \
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
思路:递归
二叉搜索树特性:root.left<root<root.right
依据这个特性找到要删除的元素时间复杂度就是o(logn)也就是o(h)
接下来判断删除的结点属性:
1.叶子节点,直接置空
2.非叶子节点,那么要么左子树最大的顶替他的位置,要么右子树最小的顶替他的位置
之后左/右子树也按照这个方法进行调整。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public int front(TreeNode root){root = root.left;while(root.right!=null){root=root.right;}return root.val;}public int next(TreeNode root){root = root.right;while(root.left!=null){root = root.left;}return root.val;}public TreeNode deleteNode(TreeNode root, int key) {if(root==null) {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==null&&root.right==null){root=null;}else if(root.left!=null){root.val = front(root);root.left = deleteNode(root.left,root.val);}else{root.val = next(root);root.right = deleteNode(root.right,root.val);}}return root;}
}
Leetcode--450. 删除二叉搜索树中的节点相关推荐
- leetcode 450. 删除二叉搜索树中的节点 c语言实现
如题: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可 ...
- 67. Leetcode 450. 删除二叉搜索树中的节点 (二叉搜索树-基本操作类)
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用.一般来说,删除节点可分为两个步 ...
- LeetCode 450. 删除二叉搜索树中的节点
参考 二叉搜索树删除操作 要删除节点有2子节点,找到右子树中最小的节点,将其val值覆盖要删除的节点值,再删除这个最小节点 要删除的节点的子节点为1个或0个,直接将要删除的节点的父节点指向子的子节点 ...
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...
- 450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除节点可分为两个 ...
- 力扣450. 删除二叉搜索树中的节点(JavaScript)
var deleteNode = function(root, key) {//没找到if(root==null){return root}//找到了if(root.val==key){//1,没有子 ...
- LeetCode刷题实战450:删除二叉搜索树中的节点
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- LeetCode450题—— 删除二叉搜索树中的节点
首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/70 ...
- 【数据结构与算法】之深入解析“删除二叉搜索树中的节点”的求解思路与算法示例
一.题目要求 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变,返回二叉搜索树(有可能被更新)的根节点的引用. 一般来说,删除 ...
最新文章
- 【收藏】HBase集成Phoenix实现类SQL操作hbase
- android错误-android.util.AndroidRuntimeException:You cannot combine custom titles with other title
- python k线顶分型_【缠论】分型、笔的定义及其程序化
- C#连接4种类型数据库(Access、SQL Server、Oracle、MySQL)
- mysql临时表数量_MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
- 在超链接href中实现form的提交
- webview 模拟点击_Android如何基于坐标对View进行模拟点击事件详解
- EMI (电磁干扰)
- Linux下informix的安装(最简单超详细)
- web前端教程,详解引入CSS的4种方式
- yuv420转yuv422(yuyv)
- oracle 授权所有语句,oracle grant 授权语句
- 以太坊实战之《如何正确处理nonce》
- Android View绘制6 Draw过程(下)
- 原型模型| 软件工程
- “我只警告一次,下次我会直接忽略你发的垃圾,懂?”Linus 精彩炮轰语录集锦...
- colab如何读取google drive(谷歌云盘)的文件
- 坑,爱转换PDF转换器,熊猫办公
- 怎么安装Python?改选什么版本呢?Python新手必看
- 2018中国区块链百强企业第一弹 | 链塔智库
热门文章
- 剑指Offer - 面试题5. 替换空格(字符串)
- LeetCode 462. 最少移动次数使数组元素相等 II(数学)
- python安装scipy出现红字_windows下安装numpy,scipy遇到的问题总结
- java toast_Android中Toast的用法简介
- Java基础10(反射)
- 人在斯坦福,刚上CS224n
- NLP预训练之路——从word2vec, ELMo到BERT
- 论文浅尝 | 时序与因果关系联合推理
- 漆桂林 | 人工智能的浪潮中,知识图谱何去何从?
- 论文浅尝 | Global Relation Embedding for Relation Extraction