Data structures 如何获取元素在bst递归中的位置??在O(h)运行时

Data structures 如何获取元素在bst递归中的位置??在O(h)运行时,data-structures,binary-search-tree,Data Structures,Binary Search Tree,我需要获取bst元素的位置。这是我正在使用的结构,numSubtree(用于跟踪子树中有多少节点) 例如,如果调用(number)的位置_,它应该返回索引1、2、3..等 到目前为止我已经试过了 int _position_of(bst_node *t, T x, int count){ if (t->left != nullptr) { count = t->left->numNodesSub + 1;

我需要获取bst元素的位置。这是我正在使用的结构,numSubtree(用于跟踪子树中有多少节点)

例如,如果调用(number)的位置_,它应该返回索引1、2、3..等 到目前为止我已经试过了

 int _position_of(bst_node *t, T x, int count){

          if (t->left != nullptr) {
               count = t->left->numNodesSub + 1;
          }else {
                count = 1;  
          }

          if (t->val == x) {
            return count;
          }
            
          if (x < t->val ) {
            return _position_of(t->left, x, count);
          }

          //otherwise 
          return _position_of(t->right, x, count + 1);

      }
int\u位置(bst\u节点*t,tx,int计数){
如果(t->left!=nullptr){
计数=t->left->numNodesSub+1;
}否则{
计数=1;
}
如果(t->val==x){
返回计数;
}
如果(xval){
返回(t->left,x,count)的位置;
}
//否则
返回(t->右,x,计数+1)的位置;
}

给定一个
bst_节点*节点和一个元素
x
我们想找到元素的数量
子树是
>x
,所以在
根->左
上找到位置

  • 如果
    node->val>x
    node
    node->left
    子树是
    val==x
    ,则只有
    node
    node->left
    子树是
    left,x);
    } 
    bst_节点*左_节点=节点->左;
    int左子树大小=0;
    如果(节点->左){
    左子树大小=节点->左->numSubtree;
    }
    如果(节点->值>x){
    返回1+左子树大小+位置(节点->右,x);
    }否则{
    返回1+左子树大小;
    }
    }
    
    给定一个
    bst_节点*节点和一个元素
    x
    我们想找到元素的数量
    子树是
    >x
    ,所以在
    根->左
    上找到位置

  • 如果
    node->val>x
    node
    node->left
    子树是
    val==x
    ,则只有
    node
    node->left
    子树是
    left,x);
    } 
    bst_节点*左_节点=节点->左;
    int左子树大小=0;
    如果(节点->左){
    左子树大小=节点->左->numSubtree;
    }
    如果(节点->值>x){
    返回1+左子树大小+位置(节点->右,x);
    }否则{
    返回1+左子树大小;
    }
    }
    
    您必须在函数开头检查
    t
    是否为空,因为在执行(t->right,x,count+1)的
    \u位置时传递了一个可能为空的指针
    您必须在函数开头检查
    t
    是否为空,因为在执行(t->right,x,count+1)的
    \u位置时传递了一个可能为空的指针我实现了那个解决方案,但它给了我错误的答案position@LuisLema真令人惊讶。您能提供一个示例测试用例以及预期的和实际的输出吗?我实现了那个解决方案,但它给了我错误的答案position@LuisLema真令人惊讶。您能否提供一个示例测试用例以及预期和实际输出?
    
     int _position_of(bst_node *t, T x, int count){
    
              if (t->left != nullptr) {
                   count = t->left->numNodesSub + 1;
              }else {
                    count = 1;  
              }
    
              if (t->val == x) {
                return count;
              }
                
              if (x < t->val ) {
                return _position_of(t->left, x, count);
              }
    
              //otherwise 
              return _position_of(t->right, x, count + 1);
    
          }