二叉搜索樹資料來自百度百科。 分析示例1 輸入:root = [10,5,15,3,7,null,18], L = 7, R = 15 輸出:32 LR間值為10,15,7,和為32. 繼續(xù)分析可知root(根結(jié)點(diǎn))為10。 那么該如何利用遞歸求和呢? 法一:
/*** 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)//跟結(jié)點(diǎn)不存在則為空樹,直接返回0{return 0;}if(root->val >=L && root->val <= R){return root->val + rangeSumBST(root->left , L ,R) + rangeSumBST(root->right , L , R);//遞歸,當(dāng)前值和左右子樹符合條件的值相加}return rangeSumBST(root->left, L, R) + rangeSumBST(root->right, L, R);//繼續(xù)往下遞歸}
};
法二: 基本相同,最后一步換種方式
class Solution {
public:int rangeSumBST(TreeNode* root, int L, int R) {if(root == NULL)return 0;if(root->val <= R && root->val >= L)return rangeSumBST(root->left, L ,R) +root->val + rangeSumBST(root->right, L ,R);else if(root->val > R){return rangeSumBST(root->left, L ,R);}else{return rangeSumBST(root->right, L ,R);}}
};
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖