lintcode 删除二叉查找树的节点

作者: yzawyx0220 | 来源:发表于2017-01-17 17:06 被阅读125次

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

         5

       /    \

    3          6

 /    \

2       4

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

          5

       /    \

    2          6

      \

         4

或者:

         5

       /    \

    4          6

 /   

2

题目链接:http://www.lintcode.com/zh-cn/problem/remove-node-in-binary-search-tree/
先通过递归找到要删除节点的位置,然后找到要删除节点的右子树中最小的点,将它赋值给要删除的节点,然后删除节点。

/**
 * 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 root;
        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 && root->right) {
            root->val = findMin(root->right);
            removeNode(root->right,root->val);
        }
        else root = (root->left) ? root->left : root->right;
        return root;
    }
    int findMin(TreeNode *root) {
        while (root->left) root = root->left;
        return root->val;
    }
};

相关文章

  • 二叉树 堆 2019-04-17

    二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树...

  • lintcode 删除二叉查找树的节点

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

  • 二叉树

    1.二叉树的遍历:前序、中序、后序遍历 2.二叉树查找节点和删除节点的代码

  • 读书打卡<<算法图解-第十一章 接下来如何做>>

    1 树 1二叉查找树 二叉查找树的左边节点都比他小,右边节点都比他大从根节点开始逐步往下找 二叉查找树的查...

  • 二叉查找树归纳-查找,插入,删除

    二叉查找树主要的操作包括查找指定元素,插入元素,删除指定元素,以及寻找最小节点,最大节点,查找指定元素的前驱或后继...

  • 二叉查找树->平衡二叉树->B树->B+树

    二叉查找树->平衡二叉树->B树->B+树定义:二叉查找树的特点就是任何节点的左子节点的键值都小于当前节点的键值,...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • [lintcode]87.删除二叉查找树的节点

    描述: 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。...

  • 第二十四节-二叉树基础(下)

    二叉查找树 二叉查找树又叫二叉搜索树。特点是,在树中任意一个节点,其左子树的每个节点的值,都要小于这个节点的值,而...

  • 基本算法

    预热姿势: 什么是二叉查找树 (二叉排序树) 1.红黑树 规则: 插入删除节点时的方法: 2. B-树 (也叫B树...

网友评论

    本文标题:lintcode 删除二叉查找树的节点

    本文链接:https://www.haomeiwen.com/subject/pbnmbttx.html