// 定义二叉查找树节点的结构 struct BSTNode { int value; // 节点的值 BSTNode* left; // 左子节点指针 BSTNode* right; // 右子节点指针 };

// 插入节点到二叉查找树中 void insertNode(BSTNode* &root, int value) { if (root == nullptr) { // 如果根节点为空,创建新节点作为根节点 root = new BSTNode; root->value = value; root->left = nullptr; root->right = nullptr; } else if (value < root->value) { // 如果待插入的值小于当前节点的值,则递归插入到左子树中 insertNode(root->left, value); } else if (value > root->value) { // 如果待插入的值大于当前节点的值,则递归插入到右子树中 insertNode(root->right, value); } }

// 在二叉查找树中查找指定值,并返回比较次数 int searchNode(BSTNode* root, int value) { int comparisons = 0; // 比较次数 BSTNode* current = root; // 当前节点指针

while (current != nullptr) {
    comparisons++; // 每次比较都增加比较次数

    if (value == current->value) {
        // 找到了目标值,返回比较次数
        return comparisons;
    } else if (value < current->value) {
        // 目标值小于当前节点的值,在左子树中继续查找
        current = current->left;
    } else {
        // 目标值大于当前节点的值,在右子树中继续查找
        current = current->right;
    }
}

// 没有找到目标值,返回比较次数
return comparisons;

}

// 主函数 int main() { int N; // 元素个数 cin >> N;

BSTNode* root = nullptr; // 二叉查找树的根节点

// 读取待查找集合并插入到二叉查找树中
for (int i = 0; i < N; i++) {
    int value;
    cin >> value;
    insertNode(root, value);
}

int target; // 待查值
cin >> target;

// 在二叉查找树中查找目标值,并得到比较次数
int comparisons = searchNode(root, target);

// 输出比较次数
cout << comparisons << endl;

return 0;

原文地址: https://www.cveoy.top/t/topic/hAls 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录