順序存儲二叉樹的概念
-
基本說明
從數據存儲來看,數組存儲方式和樹的存儲方式可以相互轉換,即數組可以轉換成樹,樹也可以轉換成數組,
看右面的示意圖。
順序存儲二叉樹的概念
-
順序存儲二叉樹的特點:
-
順序二叉樹通常只考慮完全二叉樹
-
第n個元素的左子節點為 2 * n + 1
-
第n個元素的右子節點為 2 * n + 2
-
第n個元素的父節點為 (n-1) / 2
n : 表示二叉樹中的第幾個元素(按0開始編號如圖所示)
順序存儲的二叉樹遍歷
需求: 給你一個數組 Array(1,2,3,4,5,6,7),要求以二叉樹前序遍歷的方式進行遍歷。前序遍歷的結果應當為 1,2,4,5,3,6,7
代碼實現:
package com.atguigu.chapter18.binarytree
object ArrayTreeDemo { def main(args: Array[String]): Unit = { val arr = Array(1,2,3,4,5,6,7)
val arrayTree = new ArrayTree(arr)
//前序遍歷我們的數組 arrayTree.preOrder() //1,2,4,5,3,6,7 }
} /* 課后練習:請同學們完成對數組以二叉樹中序,后序遍歷方式的代碼. */ class ArrayTree(val arr:Array[Int]) {
//對preOrder 進行一個重載 def preOrder(): Unit = { this.preOrder(0) }
def preOrder(index:Int): Unit = { if (arr == null || arr.length == 0) { println("數組為空,不能按照二叉樹前序遍歷") } println(arr(index)) //向左遞歸遍歷 if ((index * 2 + 1) < arr.length){ preOrder(index * 2 + 1) } //向右邊遞歸遍歷 if ((index * 2 + 2) < arr.length){ preOrder(index * 2 + 2) } } } |