Problem Description
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.
突然发现自己好菜啊BFS是什么都不知道了看着题目蒙蔽了半天= =
其实题目很简单只要递归就好了。逻辑是先找到一个正确的根结点,然后把左右子树都进行trim操作就好了。我的代码有点复杂,可以把前面找根结点的那步也用递归实现。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* trimBST(TreeNode* root, int L, int R) {
while (root->val < L || root->val > R) {
if (root->val < L) {
if (root->right) root = root->right;
else return NULL;
} else {
if (root->left) root = root->left;
else return NULL;
}
}
if (root->left) root->left = trimBST(root->left, L, R);
if (root->right) root->right = trimBST(root->right, L, R);
return root;
}
};