C 搜索二叉搜索树,使用计数器进行迭代

C 搜索二叉搜索树,使用计数器进行迭代,c,binary-search-tree,C,Binary Search Tree,我用了一个函数,在二叉搜索树中搜索一个数字。我使用一个外部int,它可以由函数在每次迭代中递增,因为如果数字不是根,函数会调用自己 我只是在学习二进制搜索树,但我知道有一种更好的方法,我忽略了。。。例如,使用一个返回计数器的int方法,但我无法理解 编辑: 我知道号码肯定会在BST中,我只需要看看BST搜索与通过数组搜索同一号码有多有效 // This external int can be incremented by the searchBST function // to keep tr

我用了一个函数,在二叉搜索树中搜索一个数字。我使用一个外部int,它可以由函数在每次迭代中递增,因为如果数字不是根,函数会调用自己

我只是在学习二进制搜索树,但我知道有一种更好的方法,我忽略了。。。例如,使用一个返回计数器的int方法,但我无法理解

编辑: 我知道号码肯定会在BST中,我只需要看看BST搜索与通过数组搜索同一号码有多有效

// This external int can be incremented by the searchBST function 
// to keep track of iterations

int bcounter = 0;

// Search Binary Search Tree function

node* searchBST(node ** tree, int num){

bcounter++;

if(num < (*tree)->data) {
    searchBST(&((*tree)->left), num);
}
else 
    if(num > (*tree)->data) {
    searchBST(&((*tree)->right), num);
}
else 
    if(num == (*tree)->data) {
    return *tree;
}
}
//这个外部int可以通过searchBST函数递增
//跟踪迭代
int bcounter=0;
//搜索二叉搜索树函数
节点*searchBST(节点**树,整数){
b计数器++;
如果(num<(*树)->数据){
searchBST(&(*树)->左),num;
}
其他的
如果(num>(*树)->数据){
searchBST(&(*树)->右),num;
}
其他的
如果(num==(*树)->数据){
返回*树;
}
}

计数器计算的是找到的元素的深度,而不是树中的元素数。如果这就是你想要的,那你就是好人

如果你想知道元素的数量,你需要做如下的事情

if (node is not null) {
  // count this node, it is not null
  count++;
  visit(node left);
  visit(node right);
}

首先访问左侧或右侧并不重要,您只想访问所有感兴趣的节点。

这不是对您的问题的回答,但在if语句中,在您两次调用searchBST之前,您需要“返回”。但是,关于您的问题,您说有更好的方法来“返回”。这是什么意思?你想做得更好的是什么?如果是计数,则可以将其作为参数传递,或使其成为函数中的静态变量。