顺序存储二叉树
一、什么是顺序存储二叉树
顺序存储二叉树就是用数组的方式存储二叉树,通常只考虑完全二叉树的情况。
二、顺序存储二叉树的特点
- 数组下标为 n 的左孩子的下标为2n+1;
- 数组下标为 n 的右孩子的下标为2n+2;
- 数组下标为 n 的父节点的下标为(n-1)/2;
三、图解
可见,1 是根节点,其左孩子的下标为2*0+1=1,arr[1]=2;右孩子的下标为2*0+2=2,arr[2]=3;
其它的节点以此类推。
四、代码
package com.tree;
/**
* 顺序存储二叉树,用数组存储二叉树
*
* @author chaixf
*
*/
public class ArrayBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
ArrayBinaryTree tree = new ArrayBinaryTree(arr);
tree.preOrder(0);
}
}
// 写一个顺序存储二叉树
class ArrayBinaryTree {
private int[] arr; // 用于存储二叉树结点
public ArrayBinaryTree(int[] arr) {
this.arr = arr;
}
/**
* 前序遍历
*/
public void preOrder(int rootIndex) {
// 判断树是否为空
if (arr == null || arr.length < 0) {
System.out.println("树为空!");
return;
}
// 先输出当前结点
System.out.println(arr[rootIndex]);
// 如果左孩子存在,就递归输出左孩子
if (2 * rootIndex + 1 <= arr.length - 1) {
preOrder(rootIndex * 2 + 1);
}
// 如果右孩子存在,就递归输出右孩子
if (2 * rootIndex + 2 <= arr.length - 1) {
preOrder(rootIndex * 2 + 2);
}
}
}