You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在按a值排序的AVL树中查找独立b值的最小值?

解决AVL树中查找b值最小值的方法

因为b值和AVL树基于a的排序规则无关,必须遍历所有节点才能找到全局最小的b值。下面是两种可行的递归实现思路,完全不会出现“丢失最小值”的问题:

方法1:用指针参数实时更新最小值

递归函数传入一个指向int的指针,用来持续记录当前找到的最小值。初始时把指针指向一个极大值(比如INT_MAX),遍历每个节点时,若当前节点的b值更小,就更新指针指向的值。

示例代码:

#include <limits.h>

void findMinB(struct avl* root, int* min_val) {
    if (root == NULL) {
        return;
    }
    // 更新当前最小值
    if (root->b < *min_val) {
        *min_val = root->b;
    }
    // 递归遍历左右子树
    findMinB(root->left, min_val);
    findMinB(root->right, min_val);
}

// 调用方式
int min_b = INT_MAX;
findMinB(your_avl_root, &min_b);
// 此时min_b即为树中b的最小值

方法2:递归返回当前子树的最小b值

让递归函数返回当前子树(含当前节点)的最小b值,通过合并当前节点b值、左子树最小值、右子树最小值,最终得到全局最小值。

示例代码:

#include <limits.h>

int findMinB(struct avl* root) {
    if (root == NULL) {
        // 空树返回极大值,不影响最小值计算
        return INT_MAX;
    }
    // 递归获取左右子树的最小b值
    int left_min = findMinB(root->left);
    int right_min = findMinB(root->right);
    // 三者取最小
    int curr_min = root->b < left_min ? root->b : left_min;
    return curr_min < right_min ? curr_min : right_min;
}

// 调用方式
int min_b = findMinB(your_avl_root);
// 注意:树为空时min_b会是INT_MAX,调用前需判断树是否非空

额外提示

  • 调用前务必判断树是否为空,避免得到错误的极大值结果。
  • 两种方法都会完整遍历所有节点,不会遗漏任何可能的b值,完全不用担心最小值丢失。

内容的提问来源于stack exchange,提问作者zogac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:21:08