zoukankan      html  css  js  c++  java
  • 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
    

     含义:现在有一个二叉搜索树,现在要让你删除一个节点,并且保证整个BST的性质不变

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11         
    12 public TreeNode deleteNode(TreeNode root, int key) {
    13     if(root == null){
    14         return null;
    15     }
    16     if(key < root.val){
    17         root.left = deleteNode(root.left, key);
    18     }else if(key > root.val){
    19         root.right = deleteNode(root.right, key);
    20     }else{
    21         if(root.left == null){
    22             return root.right;
    23         }else if(root.right == null){
    24             return root.left;
    25         }
    26         
    27         TreeNode minNode = findMin(root.right);
    28         root.val = minNode.val;
    29         root.right = deleteNode(root.right, root.val);
    30     }
    31     return root;
    32 }
    33 
    34 private TreeNode findMin(TreeNode node){
    35     while(node.left != null){
    36         node = node.left;
    37     }
    38     return node;
    39 }
    40 }
     
  • 相关阅读:
    adb 连接时候不弹出授权对话框【转】
    Android设备adb授权的原理【转】
    JDK-Logger
    使用xpath时出现noDefClass的错误(找不到某个类)
    Netty系列之Netty 服务端创建
    windows 如何查看端口占用情况?
    解决Apache/PHP无法启动的问题
    多个mysql解决方法
    Qt 静态编译后的exe太大, 可以这样压缩.
    烈焰SWF解密
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7732142.html
Copyright © 2011-2022 走看看