lintcode-87-删除二叉查找树的节点
87-删除二叉查找树的节点
给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。
样例
给出如下二叉查找树:
删除节点3之后,你可以返回:
或者:
标签
二叉查找树 LintCode 版权所有
思路
若要删除一个BST的一个结点,需要考虑如下三种情况:
- 需要删除的节点下并没有其他子节点
- 需要删除的节点下有一个子节点(左或右)
- 需要删除的节点下有两个子节点(既左右节点都存在)
对这三种情况分别采取的措施是:
- 直接删除此结点
- 删除此结点,将此结点父节点连接到此结点左(右)子树
- 找出此结点右子树中的最小结点,用以代替要删除的结点,然后删除此最小结点
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-删除二叉查找树的节点相关推荐
- HTML批量删除标记,批量删除LabelImg制作的.xml中的部分标签值(删除.xml的节点值)...
概述 自己在用labelImg打好标签后,想只用其中几类训练,不想训练全部类别,又不想重新打标生成.xml文件,因此想到这个办法:直接在.xml文件中删除原有的不需要的标签类及其属性. 打标时标签名出 ...
- 剑指offer:面试题18. 删除链表的节点
题目:删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], ...
- 016_Redis集群的删除和添加节点
1. 集群操作命令 1.1. 查看集群命令 1.2. create创建一个集群. 1.3. add-node添加一个节点到集群. 1.4. reshard分片. 1.5. del-node移除一个节点 ...
- LeetCode-剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点 思路:用一个头节点,以及pre,cur双指针 /*** Definition for singly-linked list.* struct ListNode ...
- 双向链表删除节点时间复杂度_删除链表的节点(剑指offer第十七题)
删除链表的节点 题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点.返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], ...
- 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
两种方法实现: package cn.exercise.list; import java.util.HashMap; /** * 删除链表重复节点(重复节点只保留一个) */ public clas ...
- java二叉树插入节点_[javaSE] 数据结构(二叉查找树-插入节点)
public class BSTree>{private BSTNodemRoot;/*** 定义二叉树 * *@authortaoshihan *@param **/ public class ...
- 【0ms优化】剑指 Offer 18. 删除链表的节点
立志用最少的代码做最高效的表达 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5, ...
- 链表之删除链表中间节点
题目: 链表之删除链表中间节点 思路: 方法1: 我们先得到链表的长度,如果是奇数的话加一除以2,如果是偶数直接除以二, 得到的长度,然后从头结点开始遍历得到的长度前一个节点,然后把它删除 方法 ...
最新文章
- 编程计算1+2+3+4+...+n的值超过500的和的第一个值
- 前端面试每日 3+1 —— 第32天
- SAP Spartacus里的bootstrap button usage
- mapgis编辑属性结构编辑不了_MapGIS67操作手册(3-17)MapGIS67编辑线属性结构的方法...
- linux服务器搭建_基于LINUX系统的邮件服务器搭建和详细部署(POSTFIX)
- MySQL进阶操作之视图
- hive基于多列去重操作
- 教你一个快速视频处理的神器:Python moviepy
- 52.3. HAVING
- oracle 11g空表不能exp导出问题解决方案
- 结合webpack配置_呕心沥血编写的webpack多入口零基础配置 【建议收藏】
- 哪有没时间这回事-读后感
- Windows 设置文件默认打开方式
- CSS3 Web工程师工作场景动画
- NOIP2018提高组 货币系统
- excel 的选择性粘贴
- 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
- 纵横内外·突破盲区|BF-TR8500​高功率全频段数字中继台
- 计算机键盘按键更改,键盘的按键如何更改
- 商用车车队管理系统FMS