数据结构与算法题目集|7-5 堆中的路径 c++满分题解

 

将一系列给定数字依次插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。

输入格式:

每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。

输出格式:

对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

输入样例:

5 3
46 23 26 24 10
5 4 3

输出样例:

24 23 10
46 23 10
26 10

这一题我犯了一个巨新手的错误,在up维护最小堆的函数中,没有使用引用,导致我花了很长时间取找它为什么不正确,以后一定要记住这个点

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

// 堆化操作,使得从节点i开始向上调整,维护最小堆性质
void up(vector<int>& st, int i) {
    while (i > 0 && st[(i - 1) / 2] > st[i]) { // 如果当前节点的值比父节点的值小,交换它们
        swap(st[i], st[(i - 1) / 2]);
        i = (i - 1) / 2; // 更新当前节点的索引为其父节点的索引
    }
}

// 打印从节点i到根节点的路径
void findpath(vector<int> st, int i) {
    while (i > 0) {
        cout << st[i] << " "; // 打印当前节点的值
        i = (i - 1) / 2; // 更新当前节点的索引为其父节点的索引
    }
    cout << st[0]; // 打印根节点的值
    cout << endl; // 换行
}

int main() {
    int n, m;
    cin >> n >> m; // 输入堆的大小n和查询的数量m
    vector<int> heap;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num; // 依次输入堆中的元素
        heap.push_back(num); // 将元素添加到堆中
        up(heap, i); // 调整堆,使其满足最小堆性质
    }
    for (int i = 0; i < m; i++) {
        int index;
        cin >> index; // 输入查询的节点索引
        findpath(heap, index - 1); // 打印从查询节点到根节点的路径
    }
    return 0;
}

相关推荐

  1. C语言版数据结构算法pta合7-3 括号匹配

    2024-02-21 02:34:01       58 阅读
  2. 数据结构

    2024-02-21 02:34:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 02:34:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 02:34:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 02:34:01       87 阅读
  4. Python语言-面向对象

    2024-02-21 02:34:01       96 阅读

热门阅读

  1. 抛弃for循环遍历list

    2024-02-21 02:34:01       56 阅读
  2. 2179. 圆桌问题(最大流,二分图多重匹配)

    2024-02-21 02:34:01       59 阅读
  3. 用Kali Linux自带的MSF远控windows系统

    2024-02-21 02:34:01       54 阅读
  4. Go 空切片 VS nil切片

    2024-02-21 02:34:01       52 阅读
  5. 51%攻击

    2024-02-21 02:34:01       56 阅读
  6. 分页工具类

    2024-02-21 02:34:01       50 阅读
  7. 1. A. Did We Get Everything Covered?(构造、思维)

    2024-02-21 02:34:01       51 阅读
  8. iocp简单例子

    2024-02-21 02:34:01       53 阅读
  9. Kubernetes 100个常用命令!

    2024-02-21 02:34:01       51 阅读
  10. 数组排序(C语言)

    2024-02-21 02:34:01       53 阅读
  11. 发NLP方向顶会这24个研究方向可以卷

    2024-02-21 02:34:01       45 阅读