1,顺序存储二叉树基本介绍
- 顺序存储二叉树是堆排序的基本思想
- 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换为树,树也可以转换为数组,如下图所示

- 顺序存储二叉树只考虑完全二叉树,并且元素间存在函数对应关系
- 第n个元素的左子节点为:
index = 2 * n + 1
- 第n个元素的右子节点为:
index = 2 * n + 2
- 第n个元素的父节点为:
index = (n - 1)/ 2
- 其中n表示在完全二叉树中的第几个元素,同时也表示数组中的索引下标,从0开始
2,代码实现
package com.self.datastructure.tree;
public class ArrayBinaryTree {
private static int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
public static void main(String[] args) {
System.out.println("前序输出");
preShowDetails(0);
System.out.println("中序输出");
middleShowDetails(0);
System.out.println("后序输出");
postShowDetails(0);
}
public static void preShowDetails(int index) {
System.out.println("前序输出: " + array[index]);
if ((index * 2 + 1) < array.length) {
preShowDetails(index * 2 + 1);
}
if ((index * 2 + 2) < array.length) {
preShowDetails(index * 2 + 2);
}
}
public static void middleShowDetails(int index) {
if ((index * 2 + 1) < array.length) {
middleShowDetails(index * 2 + 1);
}
System.out.println("中序输出: " + array[index]);
if ((index * 2 + 2) < array.length) {
middleShowDetails(index * 2 + 2);
}
}
public static void postShowDetails(int index) {
if ((index * 2 + 1) < array.length) {
postShowDetails(index * 2 + 1);
}
if ((index * 2 + 2) < array.length) {
postShowDetails(index * 2 + 2);
}
System.out.println("后序输出: " + array[index]);
}
}