Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.
Example 1:
Input:
1
/ \
0 2
L = 1
R = 2
Output:
1
\
2
题目大致意思就是给定一个二叉树和一个范围L和R,让你返回所有元素在范围内的二叉树。
解决思路:
- 首先,如果该节点是空的就返回空的。
- 然后,如果该节点比L还要小,那肯定让该节点和它的右节点里面找。 反之,如果该节点比R还要大,那跟它的左节点里找。
- 上面都不是,那这个节点肯定是在范围了,所以它的左节点就从它的左节点里找,右节点从它的右节点里找。代码用递归可以实现。
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* trimBST(struct TreeNode* root, int L, int R) {
if (root == NULL)
return NULL;
if (root->val < L)
return trimBST(root->right, L, R);
if (root->val > R)
return trimBST(root->left, L, R);
root->left = trimBST(root->left, L, R);
root->right = trimBST(root->right, L, R);
return root;
}