lintcode-87-删除二叉查找树的节点
2024-09-22 02:21:45
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 here
if(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;
}
};
最新文章
- JS身份证号码校验
- 用.net在画出镂空图片
- 每天一命令 git reset
- 数据库对象映射为java对象,不使用框架
- HDU2028 Lowest Common Multiple Plus
- Sublime-text markdown with Vim mode and auto preview
- God of War - HDU 2809(状态压缩+模拟)
- 【转载】ASP.NET线程安全与静态变量的生命周期浅谈
- Eat Candy(暴力,水)
- Apache Spark 2.2.0 中文文档 - Submitting Applications | ApacheCN
- Echarts数据可视化series-radar雷达图,开发全解+完美注释
- DOM4J生成、解析XML实例
- vue入坑教程(一)
- spring boot mybatis打印SQL语句
- linux各文件夹含义和作用
- H3C_IRF_BFD配置
- exec函数族
- Linux 中 FQDN 查询及设置
- 《转》python学习(10)-集合
- golang web框架 beego 学习 (二) router and controller
热门文章
- springboot+mybatisplus 测试代码生成
- poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)&#178;)修改与查询
- ABAP术语-BAPI Explorer
- 解决 Android sdk content loader 0%
- weex踩坑记录
- docker化安装grafana
- php GD 圆图 -处理成圆图片
- 一个 mr 作业跑的比较慢,如何来优化。
- 解决pycharm报错:AttributeError: module &#39;pip&#39; has no attribute &#39;main&#39;
- python函数的返回值