Data structures 如何获取元素在bst递归中的位置??在O(h)运行时
我需要获取bst元素的位置。这是我正在使用的结构,numSubtree(用于跟踪子树中有多少节点) 例如,如果调用(number)的位置_,它应该返回索引1、2、3..等 到目前为止我已经试过了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;
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);
}