顺序存储结构
二叉树的存储结构可以分为两种:

- 顺序存储:使用线性表(数组)存储二叉树

- 链式存储:使用链表存储二叉树

在上篇文章:数据结构 - 树、二叉树及四种遍历解析实现
使用链式存储二叉树,这篇完成顺序存储
顺序存储的特点
以数组的方式存放二叉树,要完成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

本文深入探讨了二叉树的顺序存储结构,通过数组实现二叉树的存储,并详细解释了节点之间的数学关系,包括如何找到左子节点、右子节点和父节点。此外,还提供了Java代码示例,演示了如何进行前序遍历。
3464

被折叠的 条评论
为什么被折叠?



