持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
顺序存储的二叉树
顺序存储二叉树的概念: 以数据存储来卡你,数组存储方式和树的存储方式是可以相互转换的,即数组可以转换为树,树也可以转换为数组
那么在对于顺序存储二叉树,我们就可以利用数组的顺序存储的特点,用数组来实现二叉树的顺序存储
二叉树顺序存储是二叉树的一种存储方式。二叉树的顺序存储就是用一组连续的存储单元spm=1001.2101.3001.7020)存放二又树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。使用此存储方式,结点的前驱和后继不一定是它们在逻辑上的邻接关系,非常适用于满二又树和完全二又树。
概述:顺序存储使用数组的形式实现;由于非完全二叉树会导致数组中出现空缺,有的位置不能填上数字,所以顺序存储二叉树通常情况下只考虑完全二叉树
原理: 顺序存储在数组中是按照第一层第二层一次往下存储的,遍历方式也有先序遍历、中序遍历、后续遍历
性质:
-
1、顺序二叉树通常只考虑完全二叉树
-
2、第n个节点的左子节点为 2 * n + 1
-
3、第n个元素的右子节点为 2 * n + 2
-
4、第n个元素的父节点为 (n - 1) / 2
-
5、n:表示二叉树中的第几个元素(按0开始编号)
代码实现:
- 树类
public class ArrayBinaryTree {
int[] data;
public ArrayBinaryTree(int[] data) {
this.data = data;
}
//重载先序遍历方法,不用每次传参数了,保证每次从头开始
public void frontShow() {
frontShow(0);
}
//先序遍历
public void frontShow(int index) {
if (data == null || data.length == 0) {
return;
}
//先遍历当前节点的内容
System.out.print(data[index] + " ");
//处理左子树:2*index+1
if (2 * index + 1 < data.length) {
frontShow(2 * index + 1);
}
//处理右子树:2*index+2
if (2 * index + 2 < data.length) {
frontShow(2 * index + 2);
}
}
}
- 测试类
public class Demo {
public static void main(String[] args) {
int[] data = {1,2,3,4,5,6,7};
ArrayBinaryTree tree = new ArrayBinaryTree(data);
//先序遍历
tree.frontShow(); //1 2 4 5 3 6 7
}
}