❤️算法系列之顺序二叉树的实现(前序遍历中序遍历后序遍历)❤️
Posted Roninaxious
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️算法系列之顺序二叉树的实现(前序遍历中序遍历后序遍历)❤️相关的知识,希望对你有一定的参考价值。
【❤️算法系列之二叉树的实现(包含前序、中序、后序遍历以及节点的查找和删除)❤️】 | https://blog.csdn.net/Kevinnsm/article/details/120531258?spm=1001.2014.3001.5501 |
---|---|
1.何为顺序二叉树
顺序二叉树本质上维护了一个数组,也就是通过数组存储实现的,适用于完全二叉树
2.顺序二叉树的特点
💫(1)顺序二叉树通常只考虑完全二叉树
💫(2)第n个元素的左子节点为 2 * n + 1
💫(3)第n个元素的右子节点为 2 * n + 2
💫(4)第n个元素的父节点为 (n - 1) / 2
💮n为数组中元素的下标
3.顺序二叉树的遍历
3.1.前序遍历
protected void preOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
System.out.print(arr[n]+"->");
preOrder(2 * n + 1);
preOrder(2 * n + 2);
}
3.2.中序遍历
/**
* 中序遍历
* @param n 0
*/
protected void infixOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
preOrder(2 * n + 1);
System.out.println(arr[n] + "->");
preOrder(2 * n + 2);
}
3.3.后序遍历
/**
* 后序遍历
* @param n 0
*/
public void sufOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
preOrder(2 * n + 1);
preOrder(2 * n + 2);
System.out.println(arr[n] + "->");
}
全代码
/**
* 顺序存储二叉树 维护了一个数组
* [1,2,3,4,5,6,7],以二叉树得形式进行遍历
* 左节点:2 * n + 1
* 右节点:2 * n + 2
* n为根元素得数组下标
*/
public class SeqBinaryTree {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
System.out.println("前序遍历结果如下:");
ArrBinaryTree binaryTree = new ArrBinaryTree(arr);
binaryTree.preOrder(0);
System.out.println();
System.out.println("中序遍历结果如下:");
binaryTree.infixOrder(0);
System.out.println();
System.out.println("后续遍历结果如下:");
binaryTree.sufOrder(0);
}
}
class ArrBinaryTree {
private int[] arr;
public ArrBinaryTree(int[] arr) {
this.arr = arr;
}
/**
* 前序遍历
*
* @param n 0
*/
protected void preOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
System.out.print(arr[n]+"->");
preOrder(2 * n + 1);
preOrder(2 * n + 2);
}
/**
* 中序遍历
* @param n 0
*/
protected void infixOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
preOrder(2 * n + 1);
System.out.println(arr[n] + "->");
preOrder(2 * n + 2);
}
/**
* 后序遍历
* @param n 0
*/
public void sufOrder(int n) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,无法遍历!");
}
if (n > arr.length - 1) {
return;
}
preOrder(2 * n + 1);
preOrder(2 * n + 2);
System.out.println(arr[n] + "->");
}
}
4.顺序二叉树的注意点
💙1.对于完全二叉树,使用数组来实现节省空间,对于其他类型的二叉树就不适用了。
💙2.对于顺序二叉树底层维护了一个数组,这个数组需要提前确定大小,所以增删节点会很麻烦.
以上是关于❤️算法系列之顺序二叉树的实现(前序遍历中序遍历后序遍历)❤️的主要内容,如果未能解决你的问题,请参考以下文章
算法系列之线索化二叉树,前序线索化中序线索化后序线索化以及遍历~