2019/12/6

Leetcode_938

题目描述:BST中查找在区间 [ L,R ] 中的元素和

我的解法:前序遍历,逐个检查,计算求和,递归实现。

部分代码:

void PreOrder(TreeNode* root,int L,int R,int &sum){
    if (root == NULL)
        return;
    PreOrder(root->left,L,R,sum);
    if (root->val >= L && root->val <= R)
        sum+=root->val;
    PreOrder(root->right,L,R,sum);
 }

题后反思:对于BST,没必要逐个检查,sub_root->val < L, 那么PreOrder(sub_root->right, L, R); 如果sub_root->val > R, 那么PreOrder(sub_root->left, L, R);

     否则,返回sub_root->val + PreOrder(sub_root->left, L, R) + PreOrder(sub_root->right , L, R);

完善代码:

/**
 * 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:
    int rangeSumBST(TreeNode* root, int L, int R) {
        if (root == NULL)
            return 0;
        if (root->val < L)
            return rangeSumBST(root->right,L,R);
        else if (root->val > R)
            return rangeSumBST(root->left,L,R);
        else
            return root->val+rangeSumBST(root->left,L,R)+rangeSumBST(root->right,L,R);
    }
};

今天是刷题第一天呢  *-*

猜你喜欢

转载自www.cnblogs.com/Jovesun/p/12000154.html