数据结构与算法--顺序存储二叉树
简介
二叉树的存储结构有两种,分别为顺序存储和链式存储
顺序存储只适用于完全二叉树
-
顺序存储的完全二叉树的特征(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]);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南