顺序存储结构
二叉树的存储结构可以分为两种:
-
顺序存储:使用线性表(数组)存储二叉树
- 链式存储:使用链表存储二叉树
在上篇文章:
数据结构 – 树、二叉树及四种遍历解析实现
使用链式存储二叉树,这篇完成顺序存储
顺序存储的特点
以数组的方式存放二叉树,要完成4种遍历方式,需要数组与树结点存在对应关系
顺序存储二叉树的特点
- 顺序二叉树通常只考虑完全二叉树
-
第n个元素的左子结点为
2 * n + 1
-
第n个元素的右子结点为
2 * n + 2
-
第n个元素的父结点为
(n - 1) / 2
n表示数组的下标,对应二叉树的第几个元素
如2,是数组下标1,左子结点为
2*1+1=3
,数组下标为3的元素4,右子结点为
2*1+2=4
,数组下标为4的元素5
当然,叶子结点不存在子结点,即数组下标越界
Java实现顺序存储
使用数组存储二叉树数据
前序遍历:先输出当前元素,再遍历左子树,最后遍历右子树
package com.company.tree;
/**
* 顺序存储二叉树:用数组存储二叉树
*/
public class ArrBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7};
ArrBinaryTree tree = new ArrBinaryTree(arr);
tree.preOrder();
}
}
/**
* 实现顺序存储二叉树
*/
class ArrBinaryTree{
private int[] arr;
public ArrBinaryTree(int[] arr){
this.arr = arr;
}
public void preOrder(){
this.preOrder(0);
}
/**
* @param index 数组的下标
* 顺序存储二叉树的前序遍历
*/
public void preOrder(int index){
//如果数组为空或者是空数组
if (arr == null || arr.length == 0){
System.out.println("=== 数组为空 ===");
}
//输出当前元素
System.out.print(arr[index]+" ");
//向左递归
if ((index * 2 + 1) < arr.length){
preOrder(index * 2 + 1);
}
//向右递归
if ((index * 2 + 2) < arr.length){
preOrder(index * 2 + 2);
}
}
}
二叉树
1,2,3,4,5,6,7
前序遍历结果为
1,2,4,5,3,6,7
版权声明:本文为key_768原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。