数据结构 - 解析二叉树的顺序存储
顺序存储结构二叉树的存储结构可以分为两种:顺序存储:使用线性表(数组)存储二叉树链式存储:使用链表存储二叉树在上篇文章:数据结构 - 树、二叉树及四种遍历解析实现使用链式存储二叉树,这篇完成顺序存储顺序存储的特点以数组的方式存放二叉树,要完成4种遍历方式,需要数组与树结点存在对应关系顺序存储二叉树的特点顺序二叉树通常只考虑完全二叉树第n个元素的左子结点为 2 * n + 1第n个元素的右子结点为
·
顺序存储结构
二叉树的存储结构可以分为两种:
- 顺序存储:使用线性表(数组)存储二叉树
- 链式存储:使用链表存储二叉树
在上篇文章:数据结构 - 树、二叉树及四种遍历解析实现
使用链式存储二叉树,这篇完成顺序存储
顺序存储的特点
以数组的方式存放二叉树,要完成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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)