0
点赞
收藏
分享

微信扫一扫

【手把手带你刷LeetCode】——09.二叉搜索树的范围和(递归法)


【前言】


今天是力扣打卡第9天!

Fighting!!


【手把手带你刷LeetCode】——09.二叉搜索树的范围和(递归法)_leetcode

原题:二叉搜索树的范围和

题目描述:

给定二叉搜索树的根结点 ​​root​​​,返回值位于范围 ​[low, high]​ 之间的所有结点的值的和。 

示例1:

【手把手带你刷LeetCode】——09.二叉搜索树的范围和(递归法)_二叉搜索树_02 

输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32

 示例2:

【手把手带你刷LeetCode】——09.二叉搜索树的范围和(递归法)_递归_03

输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23

 题解:


做递归题目就是将每一层执行的递归图画出来,不能懒,画出来去感受,用不了几题,你会发现递归的解法真的很妙。


代码执行:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/


int rangeSumBST(struct TreeNode* root, int low, int high){
//方法一:递归法
//找边界
if(root == NULL){
return 0;
}
//左子树
int leftSum = rangeSumBST(root->left, low, high);//有点分治的味儿了
//右子树
int rightSum = rangeSumBST(root->right, low, high);
int result = leftSum + rightSum;
//判断根节点值
if(root->val >= low && root->val <= high){
result += root->val;
}
return result;
}

复杂度分析:


时间复杂度:O(N)----二叉搜索树节点的个数

空间复杂度:O(N)----递归调用栈的深度


总结:


今天是力扣打卡第9天!

时光不老,我们不散,咱们明天再见!!

送给每一位为梦想坚持的小友们!!!


【手把手带你刷LeetCode】——09.二叉搜索树的范围和(递归法)_leetcode_04



举报

相关推荐

0 条评论