题目要求
- 遍历一棵二叉搜索树
- 求树节点中符合给定[low, high] 范围的数之和
图解示例
算法思想
- 使用先序遍历
- 设置递归边界,当节点root为NULL时,返回
- 判断节点值val是否符合给定范围的值,若是,累加
- 遍历树的左子树和右子树
完整代码
/**
* 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 rangeSumBST(TreeNode* root, int low, int high) {
preoder(root,low,high);
return ans;
}
private:
int ans = 0;
void preoder(TreeNode* root, int low, int high) {
// 设置递归边界
if(root==NULL) return;
// 判断节点值是否是我所需要的节点值
if(root->val>=low&&root->val<=high) {
ans += root->val;
}
// 先序遍历
preoder(root->left, low, high);
preoder(root->right, low, high);
}
};
设计分析
时间复杂度:O(n)
空间复杂度:O(1)
提交结果
若有其他解法,欢迎评论区补充。