博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树--堆的实现(数组,非指针)
阅读量:6826 次
发布时间:2019-06-26

本文共 740 字,大约阅读时间需要 2 分钟。

堆的重要性质就是 儿子的值一定不小于父亲的值

1157228-20171021151715521-1203606070.png

向堆中插入数值时,首先在堆的末尾插入该数值,然后不断向上提升知道没有大小颠倒为止。

1157228-20171021151944740-887254553.png

从堆中删除最小值时,首先把堆的最后一个节点的数值复制到根节点上,并且删除最后一个节点。然后不断向下交换直到没有大小颠倒为止。在向下交换的过程中,如果有2个儿子,那么选择数值较小的儿子(如果儿子比自己小的话)进行交换。

1157228-20171021152210224-198671086.png

用数组表示二叉树时的编号

1157228-20171021152307896-1823044117.png

const int maxn=1e5+5;int heap[maxn],sz;void push(int x){    int i=sz++;//自己节点的编号    while(i>0)    {        int p=(i-1)/2;//父亲节点的编号        if(heap[p]<=x)//如果已经没有大小颠倒则退出            break;        heap[i]=heap[p];//把父亲节点的数值放下来,把自己提上去        i=p;    }    heap[i]=x;}int pop(){    int ret=heap[0];//根节点即最小值    int x=heap[--sz];//要提到根的数值    int i=0;//从根开始向下交换    while(i*2+1
=x)//已经没有大小颠倒则退出 break; heap[i]=heap[lson];//把儿子的数值提上来 i=lson; } heap[i]=x; return ret;}

转载于:https://www.cnblogs.com/orion7/p/7704886.html

你可能感兴趣的文章
组成 TensorFlow 核心的六篇论文
查看>>
从django的SECRET_KEY到代码执行
查看>>
一个轮子搞定 Fragment 和状态栏那些事
查看>>
leetcode 686. Repeated String Match 题解
查看>>
java 操作符详解
查看>>
SpringBoot整合Dubbo2.5.10
查看>>
【ES6基础】const介绍
查看>>
使用Java Socket手撸一个http服务器
查看>>
node-sass安装失败的究极解决方法与简单使用
查看>>
单例模式
查看>>
网易云轻舟微服务深度解读:基于开源,强于开源
查看>>
不轻松,服务器部署nginx+uwsgi+djangorestfremework+react
查看>>
亚洲第一届 Rust 大会将于 4 月 20 日在 [北京] 开启
查看>>
AFNetworking2.0
查看>>
TiDB 源码阅读系列文章(二)初识 TiDB 源码
查看>>
七年切图仔如何面试大厂web前端?(沟通软技能总结) | 掘金技术征文
查看>>
Express 实战(七):视图与模板:Pug 和 EJS
查看>>
学习OpenGL ES之透视和正交投影
查看>>
node的process以及child_process
查看>>
推送本地仓库至 GitHub
查看>>