class Solution {
List<TreeNode> list;
Map<TreeNode,TreeNode> map;
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null){
return null;
}
if(root.val == key && root.left == null && root.right == null){
return null;
}
map = new HashMap<>();
list = new ArrayList<>();
dfs(root);
for(TreeNode a : list){
if(a.val == key){
if(a.left == null && a.right == null){
TreeNode node = map.get(a);
if(a.val > node.val){
node.right = null;
}else{
node.left = null;
}
}else if(a.left != null && a.right == null){
a.val = a.left.val;
TreeNode left = a.left;
a.left = left.left;
a.right = left.right;
}else if(a.right != null && a.left == null){
a.val = a.right.val;
TreeNode right = a.righ