在此问题中,当传递树的根和树的任何2个节点时,它应返回进入这两个节点之间的节点之和。我遵循的方法是依次遍历树,然后将遍历遍历存储在数组中,然后从该数组中查找给定节点之间元素的总和。
/**
* 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:
struct arrwrap{
int arr[10000];
int sum=0;
};
struct arrwrap inorder(struct TreeNode* root) {
struct arrwrap x;
int index=0;
if(root!=NULL){
inorder(root->left);
x.arr[index++]=root->val;
inorder(root->right);
}
return x;
}
int rangeSumBST(TreeNode* root, int L, int R) {
int t1,t2,i;
struct arrwrap x = inorder(root);
int n= sizeof(x.arr)/sizeof(x.arr[0]);
for(i=0;i<n;i++){
if( x.arr[i] == L ){
t1=i;
}
if( x.arr[i]==R){
t2=i;
}
}
for(int j=t1;j<=t2;j++){
x.sum=x.sum+x.arr[j];
}
return x.sum;
}
};
x.arr [index ++]将始终为数组中的第一个元素建立索引,因为您在定义新的arrwrap变量时每次调用该函数的索引均为0。似乎上面的线应该是
x = inorder(root->left);
并且您应该在结构中包含某种索引变量。