Java数据结构和算法(三)顺序存储的树结构
Java数据结构和算法(三)顺序存储的树结构
二叉树也可以用数组存储,可以和完全二叉树的节点一一对应。

一、树的遍历
// 二叉树保存在数组中
int[] data;
public void preOrder() {
preOrder(0);
}
// 前序遍历指定的节点
public void preOrder(int index) {
System.out.printf(data[index] + " ");
int leftIndex = 2 * index + 1;
int rightIndex = 2 * index + 2;
// 左子树
if (leftIndex < data.length) {
preOrder(leftIndex);
}
// 右子树
if (rightIndex < data.length) {
preOrder(rightIndex);
}
}
二、堆排序
椎排序是选择排序中的一种,也是找出最大的一个数再进行交换位置。椎仅为大椎和小椎,所谓大椎就是树的所有父节点的值都比子节点大的树。
public void heapSort(int[] arr) {
// 找到最大的非叶子节点
int start = (arr.length - 1) / 2;
for (int i = start; i >= 0; i--) {
maxHeap(arr, arr.length, i);
}
for (int i = arr.length - 1; i > 0; i--) {
int tmp = arr[i];
arr[i] = arr[0];
arr[0] = tmp;
maxHeap(arr, i, 0);
}
}
// 转换指定索引位为大顶堆,大顶椎的第一个节点一定是数组中的最大值
public void maxHeap(int[] arr, int size, int index) {
int leftIndex = 2 * index + 1;
int rightIndex = 2 * index + 2;
int maxIndex = index;
if (leftIndex < size && arr[leftIndex] > arr[maxIndex]) {
maxIndex = leftIndex;
}
if (rightIndex < size && arr[rightIndex] > arr[maxIndex]) {
maxIndex = rightIndex;
}
if (maxIndex != index) {
int tmp = arr[index];
arr[index] = arr[maxIndex];
arr[maxIndex] = tmp;
maxHeap(arr, size, maxIndex);
}
}
每天用心记录一点点。内容也许不重要,但习惯很重要!
Java数据结构和算法(三)顺序存储的树结构的更多相关文章
- Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...
- Java数据结构和算法(五)--希尔排序和快速排序
在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- Java数据结构和算法(七)B+ 树
Java数据结构和算法(七)B+ 树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 我们都知道二叉查找树的查找的时间复杂度是 ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
随机推荐
- vi规范
pep8规范 # vi规范## , 后空一格# 函数和其他代码空两行
- uva-10110
走廊上的灯1-n编号,一个人走过去,第i次走的时候,如果灯编号n%i=0,那么就把这个灯的开关摁一下,从最后一个灯返回到第一个灯不做任何操作,问最后一个灯最后是关还是开, 求完全平方数, 比如8,不存 ...
- uva-705-深搜
题意,就是根据斜线组成的迷宫,判断能够组成多少个闭环. 解法: 放大俩倍或者三倍 俩倍 \ ------->10 01 三倍 \ ------->100 010 001 然后深搜, ...
- PHP中间件--ICE
ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...
- 2.mybatis实战教程(mybatis in action)之二:以接口的方式编程
转自:http://www.yihaomen.com/article/java/304.htm 前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询. 请注 ...
- SQL 2008 启用和禁用xp_cmdshell
xp_,cmd,cmdshell -- 允许配置高级选项EXEC sp_configure 'show advanced options', 1GO-- 重新配置RECONFIGUREGO-- 禁用x ...
- Jquery jcarousellite 参数说明
参数说明: btnPrev string 上一个按钮的class名, 比如 btnPrev: ".prev" btnNext string 下一个按钮的class ...
- Apache配置本地域名
打开Apache的安装目录,找到httpd.conf文件,分别去掉下面两行文字前面的#号. LoadModule vhost_alias_module modules/mod_vhost_alias. ...
- eclipse添加源码的另外一种方法
当我们使用maven或者gradle时,我们不需要担心源码的问题.Maven会帮我们下载jar包的同时下载对应的源码包.一般为source.jar,比如servlet-api-2.5-sources. ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 规范与部署
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923889450 规范与部署 懒人推动社会进步. 本篇中,我们会讲述三个知识点 定制书写规范 开发环境运行 如何 ...