669. 修剪二叉搜索树-day26

如果二叉搜索树为空,则不需要修剪,返回空树。
如果二叉搜索树不为空,则首先判断根结点值是否在给定的边界范围内,决定根结点是否保留。
如果根结点值大于上界,则根结点的右子树中的所有结点值都大于根结点值,因此都大于上界,根结点和右子树中的所有结点都不保留,修剪后剩余的结点都在根结点的左子树中。
如果根结点值小于下界,则根结点的左子树中的所有结点值都小于根结点值,因此都小于下界,根结点和左子树中的所有结点都不保留,修剪后剩余的结点都在根结点的右子树中。
如果根结点值在给定的边界范围内,则根结点保留,对左子树和右子树分别修剪。
上述过程是一个递归的过程,递归的终止条件是当前结点为空,此时返回空树。对于其余情况,首先判断根结点是否保留,然后对根结点的左子树和右子树调用递归,并用递归调用的结果更新根结点的左子树和右子树。
参考storm大神
`
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if (root == null) {
return root;
}
if (root.val > high) {
return trimBST(root.left, low, high);
}
if (root.val < low) {
return trimBST(root.right, low, high);
}
root.left = trimBST(root.left, low, high);
root.right = trimBST(root.right, low, high);
return root;
}
}

`

posted @ 2026-03-19 22:18  大头海绵宝宝  阅读(12)  评论(0)    收藏  举报