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

在C语言中如何将前序遍历的AVL树键值与高度存入数组?

解决AVL树测试中数组存储格式问题

首先看你的问题:虽然preOrder函数能正确输出节点的key和height(输出10,2,5,1,15,1,),但print_pre_order没有把这些值正确存入test_output数组,导致测试断言失败。我们需要修复print_pre_order函数,让它按照前序遍历的顺序,把每个节点的key和height依次写入数组。

问题分析

你的preOrder逻辑是完全正确的:先输出当前节点的key,再输出height,然后递归遍历左子树、右子树。但print_pre_order需要复刻这个逻辑,把打印操作替换为往数组存值的操作,同时要维护好当前数组的索引位置,确保每个值都存在正确的位置上。

修复后的print_pre_order实现

int print_pre_order(struct Node* root, int* output_array, int current_index) {
    if (root == NULL) {
        // 空节点,直接返回当前索引,不修改数组
        return current_index;
    }
    // 先存入当前节点的key
    output_array[current_index++] = root->key;
    // 再存入当前节点的height
    output_array[current_index++] = root->height;
    // 递归处理左子树,更新索引
    current_index = print_pre_order(root->link[0], output_array, current_index);
    // 递归处理右子树,更新索引
    current_index = print_pre_order(root->link[1], output_array, current_index);
    // 返回更新后的索引,供上层调用使用
    return current_index;
}

为什么这样能解决问题?

  • 这个函数和preOrder的遍历逻辑完全对齐:先处理当前节点,再左子树,最后右子树
  • 每次处理节点时,严格按照“key在前,height在后”的顺序存入数组,完全匹配你期望的格式
  • 通过返回更新后的索引,确保递归过程中数组的位置不会错乱,每个值都能被放到正确的位置上

测试验证

修复后,test_output数组会被填充为{10,2,5,1,15,1},和correct_output完全匹配,测试就会显示PASSED了。另外注意你的correct_output末尾多了个逗号,不过这个在C语言数组初始化里不影响编译,只是写法上可以去掉更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:37:37