- 删除节点没有左子树,直接返回右子树
- 删除节点没有右子树,直接返回左子树
- 两个都有,将删除节点的后继节点替换删除节点 ```java package com.alg.two;
import com.alg.TreeNode;
import java.util.Objects;
/**
- @author fuyao
@date 2022年06月02日 5:12 下午 */ public class DeleteTreeNode {
public TreeNode deleteNode(TreeNode root, int key) {
if (Objects.isNull(root)){return null;}if (root.val < key){root.left = deleteNode(root.right,key);return root;}if (root.val > key){root.left = deleteNode(root.left,key);return root;}if (root.val == key){if (Objects.isNull(root.left) && Objects.isNull(root.right)){return null;}if (Objects.isNull(root.left)){return root.right;}if (Objects.isNull(root.right)){return root.left;}TreeNode successor = root.right;while (Objects.nonNull(successor.left)){successor = successor.left;}root.right = deleteNode(successor.right,successor.val);successor.left = root.left;successor.right = root.right;return successor;}return root;
}
}
```
