博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode-87-删除二叉查找树的节点
阅读量:4676 次
发布时间:2019-06-09

本文共 1596 字,大约阅读时间需要 5 分钟。

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

样例

给出如下二叉查找树:

901252-20170709203150775-2058707330.png
删除节点3之后,你可以返回:
901252-20170709203218681-1867952148.png
或者:
901252-20170709203250712-1511627.png

标签

二叉查找树 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 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;    }};

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

你可能感兴趣的文章
js使用showModalDialog,弹出一个自适应大小窗口
查看>>
[poj 3436]最大流+输出结果每条边流量
查看>>
webpack的安装
查看>>
字符流Reader和Writer
查看>>
【校招面试 之 C/C++】第33题 C++ 11新特性(四)之STL容器
查看>>
Java替代C语言的可能性
查看>>
android ListView中CheckBox错位的解决
查看>>
linux下的mongodb数据库原生操作
查看>>
BNUOJ 1268 PIGS
查看>>
菜鸟的MySQL学习笔记(三)
查看>>
商业选址5A法则
查看>>
POJ 1191 棋盘分割(区间DP)题解
查看>>
文件同步服务器,iis 集群 ,代码同步(一)
查看>>
JS之模板技术(aui / artTemplate)
查看>>
【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】
查看>>
Mysql-2-数据库基础
查看>>
python把源代码打包成.exe文件
查看>>
再也不用担心网吧开黑队友听不清了!降噪解决方案了解一下?
查看>>
PhotoshopCS5中将单位修改成百分比
查看>>
赵雅智:js知识点汇总
查看>>