package com.datastructure.tree.binaryTree;
/**
* 顺序存储二叉树
*
* 1。顺序存储二叉树通常只考虑完全二叉树
* 2。第n个元素的左子节点为2*n+1
* 3。第n个元素的右子节点为2*n+2
* 4。第n个元素的父亲节点为(n-1)/2
*/
public class SequentialStorageBinaryTree {
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.middleOrder();
System.out.println("后序遍历");
arrBinaryTree.lastOrder();
}
}
class ArrBinaryTree{
private int arr[];
public ArrBinaryTree(int[] arr){
this.arr = arr;
}
//为了是有方便,重载方法preOrder
public void preOrder(){
this.preOrder(0);
}
//为了是有方便,middleOrder
public void middleOrder(){
this.middleOrder(0);
}
//为了是有方便,重载方法preOrder
public void lastOrder(){
this.lastOrder(0);
}
//顺序存储二叉树前序遍历,根左右
public void preOrder(int rootNode){
//先输出根
System.out.println(arr[rootNode]);
//递归遍历左子树
//为防止数组的越界
if ((2*rootNode+1)<=arr.length-1){
preOrder(2*rootNode+1);
}
//递归遍历右子树
if ((2*rootNode+2)<=arr.length-1){
preOrder(2*rootNode+2);
}
}
//顺序存储二叉树中序遍历 左根右
public void middleOrder(int rootNode){
//递归遍历左子树
//为防止数组的越界
if ((2*rootNode+1)<=arr.length-1){
middleOrder(2*rootNode+1);
}
//输出根
System.out.println(arr[rootNode]);
//递归遍历右子树
if ((2*rootNode+2)<=arr.length-1){
middleOrder(2*rootNode+2);
}
}
//顺序存储二叉树后序遍历 左右根
public void lastOrder(int rootNode){
//递归遍历左子树
//为防止数组的越界
if ((2*rootNode+1)<=arr.length-1){
lastOrder(2*rootNode+1);
}
//递归遍历右子树
if ((2*rootNode+2)<=arr.length-1){
lastOrder(2*rootNode+2);
}
//输出根
System.out.println(arr[rootNode]);
}
}
顺序存储二叉树的遍历
最新推荐文章于 2022-05-13 23:51:43 发布