1. 概念
1.以数组的形式保存的二叉树
相关的方法,如遍历仍然通过二叉树的方式
2.顺序二叉树和数组之间可以相互转换
条件:二叉树为完全二叉树
转换规则:
数组下标:0开始,从左往右
节点编号:1开始,从上往下,从左往右
关系:【数组下标index】与节点相对位置的关系
数组中index为n的某个元素:
左子节点index = 2n + 1
右子节点index = 2n + 2
父节点index = (n-1) / 2
2. 定义顺序存储二叉树
@Data
class ArrayBinaryTree {
// 元数组
private int[] arr;
// 前置遍历 TODO
public void preOrder(int index) {}
// 前置遍历 TODO
public void infixOrder(int index) {}
// 后置遍历
public void postOrder(int index) {}
}
3. 遍历
这里只展开前置遍历
前置遍历实现
// 前置遍历,从0开始
public void preOrder(int index) {
System.out.println(arr[index]);
// 判断左节点(左节点index=2*index+1)
if (2 * index + 1 < arr.length) {
preOrder(2 * index + 1);
}
// 判断右节点(右节点index=2*index+2)
if (2 * index + 2 < arr.length) {
preOrder(2 * index + 2);
}
}
前置遍历测试
/**
* 输出结果:
* 1 2 4 5 3 6 7
*/
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7};
ArrayBinaryTree arrTree = new ArrayBinaryTree(arr);
arrTree.preOrder(0);
}