87-删除二叉查找树的节点

给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。

样例

给出如下二叉查找树:

删除节点3之后,你可以返回:

或者:

标签

二叉查找树 LintCode 版权所有

思路

若要删除一个BST的一个结点,需要考虑如下三种情况:

  1. 需要删除的节点下并没有其他子节点
  2. 需要删除的节点下有一个子节点(左或右)
  3. 需要删除的节点下有两个子节点(既左右节点都存在)

对这三种情况分别采取的措施是:

  1. 直接删除此结点
  2. 删除此结点,将此结点父节点连接到此结点左(右)子树
  3. 找出此结点右子树中的最小结点,用以代替要删除的结点,然后删除此最小结点

code

/*** Definition of TreeNode:* class TreeNode {* public:*     int val;*     TreeNode *left, *right;*     TreeNode(int val) {*         this->val = val;*         this->left = this->right = NULL;*     }* }*/
class Solution {
public:/*** @param root: The root of the binary search tree.* @param value: Remove the node with given value.* @return: The root of the binary search tree after removal.*/TreeNode* removeNode(TreeNode* root, int value) {// write your code hereif(root == NULL) {return NULL;}if(root->val > value) {root->left = removeNode(root->left, value);}else if(root->val < value) {root->right = removeNode(root->right, value);}else {if (root->left == NULL || root->right == NULL) {root = (root->left != NULL) ? root->left : root->right;}else {TreeNode *cur = root->right;while (cur->left != NULL) {cur = cur->left;}root->val = cur->val;root->right = removeNode(root->right, cur->val);}}return root;}
};

转载于:https://www.cnblogs.com/libaoquan/p/7142767.html

lintcode-87-删除二叉查找树的节点相关推荐

  1. HTML批量删除标记,批量删除LabelImg制作的.xml中的部分标签值(删除.xml的节点值)...

    概述 自己在用labelImg打好标签后,想只用其中几类训练,不想训练全部类别,又不想重新打标生成.xml文件,因此想到这个办法:直接在.xml文件中删除原有的不需要的标签类及其属性. 打标时标签名出 ...

  2. 剑指offer:面试题18. 删除链表的节点

    题目:删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], ...

  3. 016_Redis集群的删除和添加节点

    1. 集群操作命令 1.1. 查看集群命令 1.2. create创建一个集群. 1.3. add-node添加一个节点到集群. 1.4. reshard分片. 1.5. del-node移除一个节点 ...

  4. LeetCode-剑指 Offer 18. 删除链表的节点

    剑指 Offer 18. 删除链表的节点 思路:用一个头节点,以及pre,cur双指针 /*** Definition for singly-linked list.* struct ListNode ...

  5. 双向链表删除节点时间复杂度_删除链表的节点(剑指offer第十七题)

    删除链表的节点 题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点.返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], ...

  6. 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)

    两种方法实现: package cn.exercise.list; import java.util.HashMap; /** * 删除链表重复节点(重复节点只保留一个) */ public clas ...

  7. java二叉树插入节点_[javaSE] 数据结构(二叉查找树-插入节点)

    public class BSTree>{private BSTNodemRoot;/*** 定义二叉树 * *@authortaoshihan *@param **/ public class ...

  8. 【0ms优化】剑指 Offer 18. 删除链表的节点

    立志用最少的代码做最高效的表达 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5, ...

  9. 链表之删除链表中间节点

    题目: 链表之删除链表中间节点 思路: 方法1: 我们先得到链表的长度,如果是奇数的话加一除以2,如果是偶数直接除以二,  得到的长度,然后从头结点开始遍历得到的长度前一个节点,然后把它删除   方法 ...

最新文章

  1. 编程计算1+2+3+4+...+n的值超过500的和的第一个值
  2. 前端面试每日 3+1 —— 第32天
  3. SAP Spartacus里的bootstrap button usage
  4. mapgis编辑属性结构编辑不了_MapGIS67操作手册(3-17)MapGIS67编辑线属性结构的方法...
  5. linux服务器搭建_基于LINUX系统的邮件服务器搭建和详细部署(POSTFIX)
  6. MySQL进阶操作之视图
  7. hive基于多列去重操作
  8. 教你一个快速视频处理的神器:Python moviepy
  9. 52.3. HAVING
  10. oracle 11g空表不能exp导出问题解决方案
  11. 结合webpack配置_呕心沥血编写的webpack多入口零基础配置 【建议收藏】
  12. 哪有没时间这回事-读后感
  13. Windows 设置文件默认打开方式
  14. CSS3 Web工程师工作场景动画
  15. NOIP2018提高组 货币系统
  16. excel 的选择性粘贴
  17. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
  18. 纵横内外·突破盲区|BF-TR8500​高功率全频段数字中继台
  19. 计算机键盘按键更改,键盘的按键如何更改
  20. 商用车车队管理系统FMS

热门文章

  1. unicode编码表_关于编码
  2. eclipse添加maven配置
  3. Linux下使用Nohup后台运行程序
  4. IntelliJ IDEA如何build path
  5. mysql.cnf配置
  6. Kotlin入门(13)类成员的众生相
  7. c语言格式化 病毒源码,【病毒】震荡波病毒C语言源码
  8. python 生成器读取文件
  9. 写论文的第三天 自建zookeeper集群
  10. 移动Web利器transformjs入门