一、数据结构与算法:
1.1、顺序(数组)存储的二叉树(只考虑 完全二叉树)特点:
第n个元素的左子节点是:2n+1;
第n个元素的右子节点是:2n+2;
第n个元素的父节点是:(n-1)/ 2;
1.2、代码实现:
Step 1) 创建 二叉树数组:
class ArrBinaryTree{
private int[] arr;
public ArrBinaryTree(int[] arr){
this.arr = arr;
}
}
Step 2) 提供 二叉树节点(前序、中序、后序)遍历方式:
public void preOrder(){
if((arr == null) || (arr.length == 0)){
System.out.println("数据为空,不能按照二叉树前序遍历");
}else {
this.preOrder(0);
}
}
public void infixNode(){
if((arr == null) || (arr.length == 0)){
System.out.println("数据为空,不能按照二叉树中序遍历");
}else {
this.infixNode(0);
}
}
public void postNode(){
if((arr == null) || (arr.length == 0)){
System.out.println("数据为空,不能按照二叉树后序遍历");
}else {
this.postNode(0);
}
}
//前序遍历
public void preOrder(int index){
System.out.print(arr[index]+" ");
if((index*2 + 1) < arr.length){
preOrder(2*index + 1);
}
if((index*2 + 2) < arr.length){
preOrder(2*index + 2);
}
}
//中序遍历
public void infixNode(int index){
if((index*2 + 1) < arr.length){
preOrder(2*index + 1);
}
System.out.print(arr[index]+" ");
if((index*2 + 2) < arr.length){
preOrder(2*index + 2);
}
}
//后序遍历
public void postNode(int index){
if((index*2 + 1) < arr.length){
preOrder(2*index + 1);
}
if((index*2 + 2) < arr.length){
preOrder(2*index + 2);
}
System.out.print(arr[index]+" ");
}
Step 3) main 方法:
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
System.out.println("\n前序遍历");
arrBinaryTree.preOrder();
System.out.println("\n中序遍历");
arrBinaryTree.infixNode();
System.out.println("\n后序遍历");
arrBinaryTree.postNode();
}
• 由 ChiKong_Tam 写于 2020 年 9 月 19 日