繁体   English   中英

如何计算二叉搜索树中的比较?

[英]How do I count comparisons in a Binary Search Tree?

我有一个用于二进制节点的类,一个二进制树和一个二进制搜索树,它们包含您的基本树函数,例如查找节点,添加节点,删除节点,获取高度,获取编号节点以及其他类似的功能。 我试图添加一个新函数,该函数计算在树中找到某个特定节点的比较次数,但我感到困惑。 我能做的最好的事情就是检查节点是否在树中,但是我不知道如何在每次比较时使计数器增加。 我要尝试的方法很难转换为我现在的代码。 我只是认为我做的不对。 如果有人可以帮助我解决这个问题,我会非常感激。

int counter = 0;
template<class ItemType>
ItemType BinarySearchTree<ItemType>::IsInTree(BinaryNode<ItemType>* 
BinTreePtr, const ItemType& item)
{
BinaryNode<ItemType>* tmp = BinTreePtr;
counter++;

if (tmp == NULL) {
    printf("Number of comparisons: \n", counter);
    return 1;
}
else {
    counter++;
    if (&tmp->getItem == item) 
    {
        printf("Number of comparisons: \n", counter);
        return 0;
    }
    else {
        counter++;
        if (item < &tmp->g)
            return IsInTree(tmp->leftChildPtr, item);
        else
            return IsIntree(tmp->rightChildPtr, item);
    }
}   
}




int main(){
BinarySearchTree<string>* tree1Ptr = new BinarySearchTree<string>();

tree1Ptr->add("10");
tree1Ptr->add("20");
tree1Ptr->add("30");
tree1Ptr->add("40");
tree1Ptr->add("50");
tree1Ptr->add("60");
tree1Ptr->add("70");
tree1Ptr->add("80");


counter = 0;
tree1Ptr->IsInTree(tree1Ptr, "10");
}

将计数器值初始化为1并在条件到if语句内的每次比较之前递增计数器

if (tmp == NULL) {
    printf("Number of comparisons: \n", counter-1);
    return 1;
}
else {
    if (counter++ && &tmp->getItem == item) 
    {
        printf("Number of comparisons: \n", counter-1);
        return 0;
    }
    else {
        if (counter++ && item < &tmp->g)
            return IsInTree(tmp->leftChildPtr, item);
        else
            return IsIntree(tmp->rightChildPtr, item);
    }
}    

counter-1会给您计数,希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM