https://leetcode.cn/problems/trim-a-binary-search-tree/description/
要点是区分在区间左边还是右边,在区间左边那么右子树也还有必要去查找删除,右边同理,返回的是删除后新树的根节点
要注意函数要实现单层逻辑和完成闭环语义
class Solution {
// 查找要删除的节点,进行删除,返回删除节点后新的树的根节点
public TreeNode trimBST(TreeNode root, int low, int high) {
// 1.找不到要删除的节点,也顺便删除上一层递归要删除的节点
if(root==null)return null;
// 2.节点在边界左边,直接删除此节点,因为左子树都小于根节点,因此尝试查找右子树,返回新树根节点
if(root.val < low)
{
// 搜索右子树
return trimBST(root.right,low,high);
}
// 3.节点在边界右边,直接删除此节点,右子树都大于根节点,因此尝试左子树,返回新树根节点
if(root.val > high)
{
// 搜索左子树
return trimBST(root.left,low,high);
}
// 赋值新树的根节点
root.left=trimBST(root.left,low,high);
root.right=trimBST(root.right,low,high);
return root;
}
}
标签:669,删除,leetcode,high,low,trimBST,二叉,root,节点 From: https://www.cnblogs.com/lxl-233/p/18186388