• 450. Delete Node in a BST


    Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST.

    Basically, the deletion can be divided into two stages:

    1. Search for a node to remove.
    2. If the node is found, delete the node.

    Note: Time complexity should be O(height of tree).

    Example:

    root = [5,3,6,2,4,null,7]
    key = 3
    
        5
       / 
      3   6
     /    
    2   4   7
    
    Given key to delete is 3. So we find the node with value 3 and delete it.
    
    One valid answer is [5,4,6,2,null,null,7], shown in the following BST.
    
        5
       / 
      4   6
     /     
    2       7
    
    Another valid answer is [5,2,6,null,4,null,7].
    
        5
       / 
      2   6
          
        4   7

    思路:
    1.若要删除的结点不在树中,直接返回根结点
    2.找到结点有下面四种情况
    • 该节点是叶子结点
    • 该结点只有左结点
    • 该结点只有右结点
    • 该结点有两个结点,找到该结点右子树的最小结点,把该节点的值替换为最小结点的值,删除最小结点
     1 class Solution {
     2 public:
     3     bool find(TreeNode* root, int key){
     4         if(root == NULL) return false;
     5         if(key < root->val) return find(root->left, key);
     6         else if(key > root->val) return find(root->right, key);
     7         else return true;
     8     }
     9     
    10     TreeNode* deleteNode(TreeNode* root, int key) {
    11         if(!find(root, key)) return root;
    12         if(key < root->val) root->left = deleteNode(root->left, key);
    13         else if(key > root->val) root->right = deleteNode(root->right, key);
    14         else{
    15             if(root->left == NULL && root->right == NULL) root = NULL;
    16             else if(root->left != NULL && root->right == NULL) root = root->left;
    17             else if(root->right != NULL && root->left == NULL) root = root->right;
    18             else{
    19                     TreeNode *temp = root->right;
    20                     while(temp->left != NULL) temp = temp->left;
    21                     root->val = temp->val;
    22                     root->right = deleteNode(root->right, temp->val);
    23             }
    24         }
    25         return root;
    26     }
    27 };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    [转] go --- err is shadowed during return
    kill 一个名字 程序的所有进程
    Mac -- pkg-config: exec: "pkg-config": executable file not found in $PATH
    Python JSON 字符串 转 json 基本使用
    Python 死循环
    cube.js 学习 cube 连接mongodb 试用二
    mongodb 通过sql 查询的几种方式
    mongodb bi-connector spring boot 集成试用
    mongodb bi-connector 使用
    pgspider mongodb fdw 查询集成
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8968981.html
Copyright © 2020-2023  润新知