- 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。
题意:如题,已经很简洁了
思路:其实直接dfs一次都可以,但是可以根据二叉搜索树的特征做剪枝,不访问不满足条件的点。
wa了一发,写dfs边界的时候忘记lef,rig本身的约束了
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int dfs(TreeNode* u,int lef,int rig)
{
if(u==NULL)return 0;
if(lef>rig)return 0;
int ret=0;
if(u->val<=rig&&u->val>=lef)ret=u->val;
return dfs(u->left,lef,min(u->val-1,rig))+dfs(u->right,max(u->val+1,lef),rig)+ret;//注意写法&lef,rig对边界的限制
}
int rangeSumBST(TreeNode* root, int low, int high) {
return dfs(root,low,high);
}
};

这篇博客讲解了如何利用二叉搜索树特性,通过改进的深度优先搜索算法来快速计算值在指定范围[low, high]内的节点和。通过剪枝减少不必要的访问,提高计算效率。

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



