题目描述:
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。
示例 1:
输入:
1
/ \
0 2
L = 1
R = 2
输出:
1
\
2
示例 2:
输入:
3
/ \
0 4
\
2
/
1
L = 1
R = 3
输出:
3
/
2
/
1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree
思路:递归
当 node->val > R 那么修剪后的二叉树必定出现在节点的左边。
类似地,当 node.val < L 那么修剪后的二叉树出现在节点的右边。
否则,我们将会修剪树的两边.
/**
* 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 root;
if(root->val < L){
//root->left = NULL;
return trimBST(root->right,L,R);
}
if(root->val > R){
//root->right = NULL;
return trimBST(root->left,L,R);
}
root->left = trimBST(root->left,L,R);
root->right =trimBST(root->right,L,R);
return root;
}
本文介绍了一种在给定的二叉搜索树中,通过修剪使得所有节点的值位于指定范围内的算法。通过递归方式,根据节点值与边界条件的关系,决定修剪的方向和结果。最终返回修剪后的树的根节点。
274

被折叠的 条评论
为什么被折叠?



