代码应返回总和,但返回0

问题描述 投票:0回答:1

在此问题中,当传递树的根和树的任何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;

       }


};
c++ data-structures binary-search-tree
1个回答
0
投票

x.arr [index ++]将始终为数组中的第一个元素建立索引,因为您在定义新的arrwrap变量时每次调用该函数的索引均为0。似乎上面的线应该是

x = inorder(root->left);

并且您应该在结构中包含某种索引变量。

© www.soinside.com 2019 - 2024. All rights reserved.