一、前言
简而言之,就是将数组变成一颗树遍历输出
将数组{1, 2, 3, 4, 5, 6, 7}
以树的前序、中序、后序遍历输出
二、代码
直接上代码
package com.lzh.tree;
/**
* @author lzh
* @create 2022-08-24 0:19
* <p>
* 顺序存储二叉树:树可以转换成数组,数组可以转换成树
* 左子节点:2*n + 1 (n为数组的下标)
* 右子节点:2*n + 2
* 父节点:(n - 1)/2
*/
public class ArrBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
System.out.println("前序");
arrBinaryTree.preOrder();
System.out.println("中序");
arrBinaryTree.infixOrder();
System.out.println("后序");
arrBinaryTree.postOrder();
}
}
class ArrBinaryTree {
private int[] arr;
public ArrBinaryTree(int[] arr) {
this.arr = arr;
}
public void preOrder() {
preOrder(0);
}
public void preOrder(int index) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,不能转换为树");
return;
}
System.out.println(arr[index]);
if ((2 * index + 1) < arr.length) {// 向左遍历
preOrder((2 * index + 1));
}
if ((2 * index + 2) < arr.length) {
preOrder((2 * index + 2));
}
}
public void infixOrder() {
infixOrder(0);
}
public void infixOrder(int index) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,不能转换为树");
return;
}
if ((2 * index + 1) < arr.length) {// 向左遍历
preOrder((2 * index + 1));
}
System.out.println(arr[index]);
if ((2 * index + 2) < arr.length) {
preOrder((2 * index + 2));
}
}
public void postOrder() {
postOrder(0);
}
public void postOrder(int index) {
if (arr == null || arr.length == 0) {
System.out.println("数组为空,不能转换为树");
return;
}
if ((2 * index + 1) < arr.length) {// 向左遍历
preOrder((2 * index + 1));
}
if ((2 * index + 2) < arr.length) {
preOrder((2 * index + 2));
}
System.out.println(arr[index]);
}
}