RoyNewDawn 2019-11-11 18:17 采纳率: 8.3%
浏览 149

用向上调整建立一个二叉堆时候如何遍及其根结点?(C++实现)

在这里,我有一个疑惑,我这样建堆是无法遍及root的,假设根结点和其左孩子逆序,这里parent计算的结果是0,无法进入循环,所以根节点总是不能动的
循环结束的条件又无法改变,仅当parent=-1/2取整为0时结束循环,用dowhile也不行,假如根节点和左孩子不是逆序的你也做了一次交换是不行的。请教各位有什么解决办法吗?我附上了简单的测试代码

//大根堆
int percolateUp(int *arr, int rank) {
    int parent = (rank-1)/2;
        while (parent>0)
        {
            if (arr[rank] < arr[parent]) break;
            std::swap(arr[rank], arr[parent]);
            rank = parent;
            parent = (parent - 1) / 2;
        }
    return parent;
}
//一种低效的建堆方式
void heapify(int *arr, int n) {
    for (int i = 1; i < n; i++) {
        percolateUp(arr,i);
    }
}
int main() {
    int a[6]{ 1,2,3,4,5,6 };
    heapify(a, 6);
    for (int i = 0; i < 6; i++) {
        std::cout << a[i] << " ";
    }
}
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-11-11 23:49
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器