基本说明
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,如图。
顺序存储二叉树的特点:
- 顺序二又树通常只考虑完全二叉树
- 第n个元素的左子节点为2*n+1
- 第n个元素的右子节点为2*n+2
- 第n个元素的父节点为(n-1)/2
- n:表示二叉树中的第几个元素(按0开始编号
如图所示)
代码实现
package com.tree;
public class ArrBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
// 创建一个ArrBinaryTree
ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
arrBinaryTree.preOrder();
}
}
class ArrBinaryTree {
private int[] arr;// 存储数据结点的数组
public ArrBinaryTree(int[] arr) {
this.arr = arr;
}
// 方法重载preOrder
public void preOrder() {
this.preOrder(0);
}
/**
* @Method_Name:preOrder
* @Description: 编写一个代码完成顺序存储二叉树的前序遍历
* @param index 数组的下标
* @date:2020年1月3日
* @author:20152 LuLong
*/
public void preOrder(int index) {
// 如果数组为空,或者arr.length=0
if (arr == null || arr.length == 0) {
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
// 输出当前这个元素
System.out.println(arr[index]);
// 向左递归前序遍历
if ((2 * index + 1) < arr.length) {
preOrder(2 * index + 1);
}
// 向右递归前序遍历
if ((2 * index + 2) < arr.length) {
preOrder(2 * index + 2);
}
}
}