1. 程式人生 > 其它 >資料結構與演算法之順序儲存二叉樹

資料結構與演算法之順序儲存二叉樹

技術標籤:資料結構演算法演算法資料結構

順序儲存二叉樹

順序儲存二叉樹的概念

  • 基本說明
    從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列,
  • 看右面的示意圖
    在這裡插入圖片描述

順序儲存二叉樹的特點:
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]); } }