2019/12/6
Posted jovesun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); } };
今天是刷题第一天呢 *-*
以上是关于2019/12/6的主要内容,如果未能解决你的问题,请参考以下文章