資料結構與演算法之順序儲存二叉樹
阿新 • • 發佈:2021-02-04
順序儲存二叉樹
順序儲存二叉樹的概念
- 基本說明
從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列, - 看右面的示意圖
順序儲存二叉樹的特點:
1)順序二叉樹通常只考慮完全二叉樹
2)第n個元素的左子節點為 2 * n + 1
3)第n個元素的右子節點為 2 * n + 2
4)第n個元素的父節點為 (n-1) / 2
需求:
給你一個數組 {1,2,3,4,5,6,7},要求以二叉樹前序遍歷的方式進行遍歷。 前序遍歷的結果應當為 1,2,4,5,3,6,7
程式碼實現
public class ArrayBinaryTreedemo {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7};
ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(arr);
System.out.println("前序遍歷輸出");
arrayBinaryTree.preOrder(0);
System.out.println("中序遍歷輸出");
arrayBinaryTree. infixOrder(0);
System.out.println("後續序遍歷輸出");
arrayBinaryTree.postOrder(0);
}
}
class ArrayBinaryTree{
private int[] arr;
public ArrayBinaryTree(int[] arr){
this.arr=arr;
}
//按照前序遍歷方式輸出
public void preOrder(int index){
if (arr==null||arr. length<0){
System.out.println("陣列為空,不能按照前序遍歷");
}
System.out.println(arr[index]);
if ((index*2+1)<arr.length){
preOrder(index*2+1);
}if (index*2+2<arr.length){
preOrder(index*2+2);
}
}
//中序遞迴遍歷輸出
public void infixOrder(int index){
if (arr==null||arr.length<0){
System.out.println("陣列為空,不能按照前序遍歷");
}
if ((index*2+1)<arr.length){
preOrder(index*2+1);
}
System.out.println(arr[index]);
if (index*2+2<arr.length){
preOrder(index*2+2);
}
}
//後序遞迴遍歷輸出
public void postOrder(int index){
if (arr==null||arr.length<0){
System.out.println("陣列為空,不能按照前序遍歷");
}
if ((index*2+1)<arr.length){
preOrder(index*2+1);
}
if (index*2+2<arr.length){
preOrder(index*2+2);
}
System.out.println(arr[index]);
}
}