给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
package 递归;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
class DeleteNodeinaBST450 {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) {
return null;
}
if (root.val > key) {
root.left = deleteNode(root.left, key);
return root;
}
if (root.val < key) {
root.right = deleteNode(root.right, key);
return root;
}
if (root.val == key) {
if (root.left == null && root.right == null) {
return null;
}
if (root.right == null) {
return root.left;
}
if (root.left == null) {
return root.right;
}
TreeNode successor = root.right;
while (successor.left != null) {
successor = successor.left;
}
root.right = deleteNode(root.right, successor.val);
successor.right = root.right;
successor.left = root.left;
return successor;
}
return root;
}
public static void main(String[] args) {
DeleteNodeinaBST450 so = new DeleteNodeinaBST450();
TreeNode a5 = new TreeNode(5);
TreeNode a2 = new TreeNode(2);
TreeNode a3 = new TreeNode(3);
TreeNode a4 = new TreeNode(4);
TreeNode a6 = new TreeNode(6);
TreeNode a7 = new TreeNode(7);
a5.left = a3;
a5.right = a6;
a3.left = a2;
a3.right = a4;
a6.right = a7;
TreeNode b = so.deleteNode(a5, 3);
int c = 1;
}
}
刷题进行时-递归-450. 删除二叉搜索树中的节点
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 问题描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二...
- 450 Delete Node in a BST 删除二叉搜索树中的节点 Description:Given a ...
- 链接:删除二叉搜索树中的节点[https://leetcode-cn.com/problems/delete-no...
- 1、题目 2、分析 思路一:使用层序遍历。可以记录下父节点的地址。方便节点删除后,拼接父节点和子树。不过要处理的特...