题目描述
Given the
root
of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in[low, high]
. Trimming the tree should not change the relative structure of the elements that will remain in the tree (i.e., any node’s descendant should remain a descendant). It can be proven that there is a unique answer.Return the
root
of the trimmed binary search tree. Note that theroot
may change depending on the given bounds.
例子
例子 1
Input:
root = [1,0,2], low = 1, high = 2
Output:[1,null,2]
例子 2
Input:
root = [3,0,4,null,2,null,null,1], low = 1, high = 3
Output:[3,2,null,1]
Constraints
The number of nodes in the tree in the range [1, 10^4].
0 <= Node.val <= 10^4
The value of each node in the tree is unique.
root is guaranteed to be a valid binary search tree.
0 <= low <= high <= 10^4
解题思路
这道题目借助二叉搜索树的结构可以比较简单的梳理出逻辑:
- 如果当前 root 为空,直接返回
- 如果当前 root 比下界还小,左子树全部丢弃,对右子树进行递归处理之后返回右子树的根节点即可
- 同理,如果当前 root 比上界还大,右子树全部丢弃,对左子树进行递归处理之后返回左子树的根节点即可
- 如果当前 root 在合法范围内,则对左右子树各自进行迭代操作,然后将处理后的左右子树根节点接上即可
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int low, int high) {
if (!root) {
return nullptr;
}
if (root->val < low)
{
return trimBST(root->right, low, high);
}
else 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;
}
};
- 时间复杂度: O(n)
- 空间复杂度: O(1)