java实现二叉树删除结点
时间: 2023-11-06 14:04:37 浏览: 41
好的,关于二叉树删除结点,可以通过以下代码实现:
```
// 定义节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
// 二叉树删除结点方法
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) {
return null;
}
// 如果找到了要删除的结点,执行删除操作
if (root.val == key) {
// 如果要删除的结点没有右子树,则直接把左子树提上来
if (root.right == null) {
return root.left;
}
// 如果要删除的结点没有左子树,则直接把右子树提上来
if (root.left == null) {
return root.right;
}
// 如果要删除的结点既有左子树又有右子树,则找到右子树中的最小值,把它替换到要删除的结点位置上,再删除右子树中的最小值节点
TreeNode minNode = getMin(root.right);
root.val = minNode.val;
root.right = deleteNode(root.right, minNode.val);
} else if (root.val > key) {
root.left = deleteNode(root.left, key);
} else {
root.right = deleteNode(root.right, key);
}
return root;
}
// 查找二叉树的最小值节点
private TreeNode getMin(TreeNode node) {
while (node.left != null) {
node = node.left;
}
return node;
}
```
希望能够帮到你。如果你还有其他问题,可以问我哦。