1.什么是顺序二叉树
- 二叉树的存储结构有两种,分别为顺序存储和链式存储。本节先介绍二叉树的顺序存储结构。
- 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。需要注意的是,顺序存储只适用于完全二叉树。换句话说,只有完全二叉树才可以使用顺序表存储。因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树。
- 有读者会说,满二叉树也可以使用顺序存储。要知道,满二叉树也是完全二叉树,因为它满足完全二叉树的所有特征。
- 普通二叉树转完全二叉树的方法很简单,只需给二叉树额外添加一些节点,将其"拼凑"成完全二叉树即可。如图 1 所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5b0a27f6cd62eaa37394d6989a0db01c.png#pic_center)
2.顺序二叉树的特点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c8feab7c02f6850789b1c189f333fe87.png#pic_center)
- 打个比方:根节点的左子节点为 2 * 0 +1 = 1 ,右子节点 2 + 0 +2 = 2
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/62ce7667bb96e95e98175910420cb362.png#pic_center)
3.代码实现
package com.qin.tree;
public class ArrayBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7};
ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
arrBinaryTree.preOrder(0);
}
}
class ArrBinaryTree{
private int[] arr;
public ArrBinaryTree(int[] arr) {
this.arr = arr;
}
public void preOrder(int index){
if (arr == null || arr.length == 0){
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
System.out.println(arr[index]);
if ((index*2+1)<arr.length){
preOrder(2*index+1);
}
if ((index*2+2)<arr.length){
preOrder(2*index+2);
}
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d1133434c4c8d647bb548c6d10737c09.png#pic_center)