标签:root style lse else 解法 amp 返回 val 否则
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); } };
今天是刷题第一天呢 *-*
标签:root style lse else 解法 amp 返回 val 否则
原文地址:https://www.cnblogs.com/Jovesun/p/12000154.html