顺序存储二叉树概述
顺序存储的二叉树通常情况只考虑完全二叉树
性质:
第n个元素的左子节点是:2*n+1
第n个元素的右子节点是:2*n+2
第n个元素的父节点是:(n-1)/2
顺序存储的二叉树遍历
package com.demo2;
public class ArrayBinaryTree {
int[] data;
public ArrayBinaryTree(int[] data) {
this.data = data;
}
public void frontShow() {
frontShow(0);
}
public void midShow() {
midShow(0);
}
public void afterShow() {
afterShow(0);
}
// 前序遍历
public void frontShow(int index) {
if (data == null || data.length == 0) {
return;
}
// 遍历当前节点
System.out.print(data[index] + " ");
// 2*index+1处理左子树
if (2 * index + 1 < data.length) {
frontShow(2 * index + 1);
}
// 2*index+2处理右子树
if (2 * index + 1 < data.length) {
frontShow(2 * index + 2);
}
}
// 中序遍历
public void midShow(int index) {
if (data == null || data.length == 0) {
return;
}
// 2*index+1处理左子树
if (2 * index + 1 < data.length) {
midShow(2 * index + 1);
}
// 遍历当前节点
System.out.print(data[index] + " ");
// 2*index+2处理右子树
if (2 * index + 1 < data.length) {
midShow(2 * index + 2);
}
}
// 后序遍历
public void afterShow(int index) {
if (data == null || data.length == 0) {
return;
}
// 2*index+1处理左子树
if (2 * index + 1 < data.length) {
afterShow(2 * index + 1);
}
// 2*index+2处理右子树
if (2 * index + 1 < data.length) {
afterShow(2 * index + 2);
}
// 遍历当前节点
System.out.print(data[index] + " ");
}
}
package com.demo2;
public class TestArrayBinaryTree {
public static void main(String[] args) {
int[] data = new int[] { 1, 2, 3, 4, 5, 6, 7 };
ArrayBinaryTree tree = new ArrayBinaryTree(data);
// 前序遍历
tree.frontShow();// 1 2 4 5 3 6 7
System.out.println();
// 中序遍历
tree.midShow();
System.out.println();// 4 2 5 1 6 3 7
// 后序遍历
tree.afterShow();// 4 5 2 6 7 3 1
}
}