数据结构与算法--顺序存储二叉树
2022/8/11 14:24:47
本文主要是介绍数据结构与算法--顺序存储二叉树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简介
二叉树的存储结构有两种,分别为顺序存储和链式存储
采用顺序存储。指的是使用顺序表(数组)存储二叉树。需要注意的是,顺序存储只适用于完全二叉树
-
顺序存储的完全二叉树的特征(n表示二叉树中第几个元素,按0开始编号)
-
第n个元素的左子节点为2n+1
-
第n个元素的右子节点为2n+2
-
第n个元素的父节点为(n-1)/2
-
-
如果想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树
-
普通二叉树转完全二叉树的方法很简单,只需给二叉树额外添加一些节点,将其"拼凑"成完全二叉树即可
-
顺序存储二叉树基础遍历
前序遍历
import java.util.LinkedList; import java.util.Queue; public class ArrayBinaryTree<K> { /**存储数据结点的数组*/ public K[] array; public ArrayBinaryTree(K[] array) { this.array = array; } /**前序遍历*/ public Queue<K> preErgodic(){ Queue<K> queue = new LinkedList<>(); if (array == null || array.length == 0) { return queue; } preErgodic(0,queue); return queue; } public void preErgodic(int index,Queue<K> queue){ queue.add(array[index]); //向左,递归遍历 if ((2 * index + 1) < array.length) { preErgodic(2 * index + 1,queue); } //向右,递归遍历 if ((2 * index + 2) < array.length) { preErgodic(2 * index + 2,queue); } } }
中序遍历
import java.util.LinkedList; import java.util.Queue; public class ArrayBinaryTree<K> { /**存储数据结点的数组*/ public K[] array; public ArrayBinaryTree(K[] array) { this.array = array; } /**中序遍历*/ public Queue<K> midErgodic(){ Queue<K> queue = new LinkedList<>(); if (array == null || array.length == 0) { return queue; } midErgodic(0,queue); return queue; } public void midErgodic(int index,Queue<K> queue){ //向左,递归遍历 if ((2 * index + 1) < array.length) { midErgodic(2 * index + 1,queue); } queue.add(array[index]); //向右,递归遍历 if ((2 * index + 2) < array.length) { midErgodic(2 * index + 2,queue); } } }
后序遍历
import java.util.LinkedList; import java.util.Queue; public class ArrayBinaryTree<K> { /**存储数据结点的数组*/ public K[] array; public ArrayBinaryTree(K[] array) { this.array = array; } /**后续遍历*/ public Queue<K> afterErgodic(){ Queue<K> queue = new LinkedList<>(); if (array == null || array.length == 0) { return queue; } afterErgodic(0,queue); return queue; } public void afterErgodic(int index,Queue<K> queue) { //向左,递归遍历 if ((2 * index + 1) < array.length) { afterErgodic(2 * index + 1, queue); } //向右,递归遍历 if ((2 * index + 2) < array.length) { afterErgodic(2 * index + 2, queue); } queue.add(array[index]); } }
这篇关于数据结构与算法--顺序存储二叉树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南
- 2024-12-21功能权限实战:新手入门指南