leetcode450
题目要求
1 | 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. |
假设有一棵二叉搜索树,现在要求从二叉搜索树中删除指定值,使得删除后的结果依然是一棵二叉搜索树。
思路和代码
二叉搜索树的特点是,对于树中的任何一个节点,一定满足大于其所有左子节点值,小于所有其右子节点值。当删除二叉搜索树中的一个节点时,一共有三种场景:
- 该该节点为叶节点,此时无需进行任何操作,直接删除该节点即可
- 该节点只有一个子树,则将唯一的直接子节点替换掉当前的节点即可
- 该节点既有做左子节点又有右子节点。这时候有两种选择,要么选择左子树的最大值,要么选择右子树的最小值填充至当前的节点,再递归的在子树中删除对应的最大值或是最小值。
对每种情况的图例如下:
1 | 1. 叶节点 |
代码如下:
1 | public TreeNode deleteNode(TreeNode cur, int key) { |