二叉树顺序存储的概念
二叉树顺序存储是二叉树的一种存储方式。二叉树的顺序存储就是用一组连续的存储单元存放二又树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。使用此存储方式,结点的前驱和后继不一定是它们在逻辑上的邻接关系,非常适用于满二又树和完全二又树。
二叉树顺序存储的特点
- 二叉树顺序存储通常只考虑完全二叉树
- 第n个元素的左子结点为第2*n+1个元素
- 第n个元素的右子结点为第2*n+2个元素
- 第n个元素的父节点为第(n-1)/2个元素
其中n表示二叉树中的第几个元素(从0开始)如下图所示
代码实现
/**
* 用数组的方式存储二叉树
*/
public class ArrayBinaryTree {
/*存储结点的数组*/
private char[] arr;
public ArrayBinaryTree(char[] arr) {
this.arr = arr;
}
/**
* 重载preDisplay
*/
public void preDisplay(){
this.preDisplay(0);
}
/**
* 顺序存储二叉树的前序遍历
* @param n 数组下标
*/
public void preDisplay(int n){
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历");
}
/*输出当前结点元素*/
System.out.print(arr[n]+" ");
/*向左递归遍历*/
if ((n * 2 + 1) < arr.length){
preDisplay(n * 2 + 1);
}
/*向右递归遍历*/
if ((n * 2 + 2) < arr.length){
preDisplay(n * 2 + 2);
}
}
}
测试类
public class ArrayBinaryTreeTest {
public static void main(String[] args) {
/*初始化数组*/
char[] arr = {'A','B','C','D','E','F','G'};
ArrayBinaryTree tree = new ArrayBinaryTree(arr);
System.out.println("前序遍历:");
tree.preDisplay();
}
}
输出结果
前序遍历:
A B D E C F G
Process finished with exit code 0