https://leetcode-cn.com/problems/delete-node-in-a-bst/
https://leetcode-cn.com/problems/delete-node-in-a-bst/
这里需要考虑的条件挺多的,但实际码起来好像也不算太难,最后注意cur指针的变化会使得后面return
的时候会丢失值,所以使用root
来return
// 首先是要寻找key所在位置,BFT可以使用中序遍历
// 考虑递归函数:
// 传入参数:root key
// 返回:root
// 终止条件:遇到空节点,则返回
// 处理逻辑:(当遍历到cur.val = val时)
// 1.左右都空,直接cur == null
// 2.左不空右空, cur = cur.left;
// 3.左空右不空, cur = cur.right;
// 4.左右都不空, 左边是小的,右边是大的,所以把小的放到大那边的最小处
// temp = cur.left;
// cur = cur.right;
// while(cur.left !=null) cur = cur.left; cur.left = temp;
// 左节点递归
// 右节点递归
class Solution {
TreeNode cur;
public TreeNode deleteNode(TreeNode root, int key) {
// System.out.println(root.val);
cur = root;
if(cur == null) return null;
if(cur.val == key){
if(cur.left == null && cur.right == null) return null;
else if(cur.left != null && cur.right == null) return cur.left;
else if(cur.left == null && cur.right != null) return cur.right;
else{
TreeNode temp = cur.left;
cur = cur.right;
//System.out.println(cur.val);
while(cur.left != null) cur = cur.left;
cur.left = temp;
return root.right;
}
}
root.right = deleteNode(root.right, key);
root.left = deleteNode(root.left, key);
return root;
}
}