public int widthOfBinaryTree(TreeNode root) { /* 层序遍历+记录完全二叉树的坐标,左孩子2*i,右孩子2*i+1 而且要有两个变量,一个记录本层节点数,一个记录下层节点数 层序遍历用队列实现 还要有一个队列记录本层的下标 */ //层序... ...
分类:
其他好文 时间:
2018-02-04 19:28:23
阅读次数:
169
初始化堆的时候是对所有的非叶子结点进行筛选。 最后一个非终端元素的下标是[n/2]向下取整,所以筛选只需要从第[n/2]向下取整个元素开始,从后往前进行调整。 比如,给定一个数组,首先根据该数组元素构造一个完全二叉树。 然后从最后一个非叶子结点开始,每次都是从父结点、左孩子、右孩子中进行比较交换,交 ...
分类:
编程语言 时间:
2018-02-04 15:36:52
阅读次数:
177
1、二叉树的定义: 二叉树是每个节点最多有两个子树的树结构。 特别地: ①除了最后一层节点外,其他节点的数目都达到了所在层的最大值,称为完全二叉树。同时,最后一层的所有节点必须从最后一层的左边开始。而不是说左边一个,右边一个,中间一个。(运用 : 二叉堆) ②除最后一层外,每一层上的所有结点都有两个 ...
分类:
其他好文 时间:
2018-02-01 14:53:51
阅读次数:
174
这个题直接遍历会超时。利用了满二叉树的特点,完全二叉树中满二叉树还是有不少的。 对于满二叉树的定义,国内的定义除了每个节点都左右子树外,要求所有叶子节点都在一层上,但是国际上的只要前一个条件就可以。这里说的满二叉树是国内定义的那种。 完全二叉树相对于满二叉树,最后一层可能缺失最右边几个节点。 以后遇 ...
分类:
其他好文 时间:
2018-01-28 16:28:22
阅读次数:
127
2.2 堆排序 堆:1. 是完全二叉树;2. 树中所有结点都比左右孩子大(或小)。(但在实现过程发现,其实堆排序并没有用到树结构,还是用的顺序表,只是用完全二叉树来理解而已)。 堆排序是一种选择排序算法,其主要思路是:先将所有待排序元素构造成一个大顶堆(或小顶堆),接着将堆顶元素和最后一个元素(层序 ...
分类:
编程语言 时间:
2018-01-27 19:01:38
阅读次数:
153
#include"stdafx.h"#include<iostream>usingnamespacestd;template<typenameT>voidadjust(T*arr,intsign,intlen){Ttemp=arr[sign];//每一次循环都更新该父节点为根的完全二叉树最大堆for(inti=sign*2+1;i<len;i=i*2+1){if(i+
分类:
编程语言 时间:
2018-01-26 14:03:27
阅读次数:
128
完全二叉树叫做堆。 完全二叉树就是最后一个节点之前不允许有不满的节点,就是不允许有空洞。 可以使用数组来做完全二叉树(堆)。 堆分为大顶堆和小顶堆。大顶堆就是根节点上的数字是最大的,小顶堆就是根节点上的数字是最小的堆。 在堆里面的操作包括两种:插入新的节点和删除根节点。 插入新节点的操作时向上渗透。 ...
分类:
编程语言 时间:
2018-01-25 00:19:47
阅读次数:
166
链式存储一个完全二叉树代码: 测试: 测试结果: ...
分类:
编程语言 时间:
2018-01-24 14:10:16
阅读次数:
148
堆排序结合了插入排序和归并排序的有点:它空间复杂度是O(1), 时间复杂度是O(nlgn). 要讲堆排序,先讲数据结构“堆” 堆: 堆是用数组来存放一个完全二叉树的数据结构。假设数组名是A,树的根节点存放在A[1]。它的左孩子存放在A[2],右孩子存放在A[3] 即:对于某个下标位i的节点,它的左孩 ...
分类:
编程语言 时间:
2018-01-23 22:09:21
阅读次数:
219
一、定义 ①堆通常是可被视为完全二叉树的数组。 ②堆中任意节点的数值总是大于或等于其左右子节点,为大根堆。 ③堆中任意节点的数值总是小于或等于其左右子节点,为小根堆。 二、存储 对于任意节点T[i] ①若其父节点存在,为T[(i - 1) / 2] ②若其左兄弟节点存在,为T[i - 1] ③若其右 ...
分类:
编程语言 时间:
2018-01-23 13:05:35
阅读次数:
198