450. Delete Node in a BST
来源:互联网 发布:网络词28是什么意思 编辑:程序博客网 时间:2024/05/17 03:31
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:
- Search for a node to remove.
- 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 7Given 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 7Another valid answer is [5,2,6,null,4,null,7]. 5 / \ 2 6 \ \ 4 7在top solution里面有个很好的解释:
Steps:
- Recursively find the node that has the same value as the key, while setting the left/right nodes equal to the returned subtree
- Once the node is found, have to handle the below 4 cases
- node doesn't have left or right - return null
- node only has left subtree- return the left subtree
- node only has right subtree- return the right subtree
- node has both left and right - find the minimum value in the right subtree, set that value to the currently found node, then recursively delete the minimum value in the right subtree
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode deleteNode(TreeNode root, int key) { if (root == null) { return null; } if (root.val < key) { root.right = deleteNode(root.right, key); } else if (root.val > key) { root.left = deleteNode(root.left, key); } else { if (root.left == null) { return root.right; } else if (root.right == null) { return root.left; } TreeNode min = findMin(root.right); root.val = min.val; root.right = deleteNode(root.right, root.val); } return root; } private TreeNode findMin(TreeNode root) { while (root.left != null) { root = root.left; } return root; }}
阅读全文
0 0
- [hard]450. Delete Node in a BST
- 450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST
- 450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST
- Leetcode-450. Delete Node in a BST
- 450. Delete Node in a BST
- 【LeetCode】 450. Delete Node in a BST
- [LeetCode]450. Delete Node in a BST
- 450. Delete Node in a BST
- 450. Delete Node in a BST**
- 450. Delete Node in a BST
- 450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST
- LeetCode 450.Delete Node in a BST
- 450. Delete Node in a BST
- leetcode 450. Delete Node in a BST
- 450. Delete Node in a BST
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- MySQL学习笔记_01
- stack corrupted vs2010Debug
- 数据库学习笔记(一)
- JZOJ 5120 【2017.5.28提高组模拟】Summing Pieces
- 450. Delete Node in a BST
- SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计
- 想写点啥东西
- 和webshell第一次亲密接触
- codeforces#416 div2- Vladik and Complicated Book
- 标识符、关键字和基本数据类型
- 17多继承
- 学习笔记三--ViewModel选项
- 有序广播和无序广播