hbase安裝與配置(偽分步)
阿新 • • 發佈:2021-01-17
一、順序儲存二叉樹概述
從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列。順序結構儲存就是使用陣列來儲存,一般使用陣列只適合表示完全二叉樹,因為不完全二叉樹會有空間的浪費。
下圖就是樹和陣列對應的關係圖:
順序二叉樹有下面幾個顯著的特徵(n 表示二叉樹中的第幾個元素,從 0 開始):
- 第 n 個元素的左子節點為第 2 * n + 1 個元素;
- 第 n 個元素的右子節點為第 2 * n + 2 個元素;
- 第 n 個元素的父節點為第 ( n - 1 ) / 2 個元素。
我們隨便選兩個節點來驗證其中一個特性。比如 元素2 是第 1 個元素,對應陣列中的 arr[1]
arr[3]
,剛好與二叉樹的第 3 個元素符合。
二、順序儲存二叉樹的操作
【案例需求】
已知一個數組為:
arr = {1,2,3,4,5,6,7}
要求以二叉樹前序遍歷的方式對陣列進行遍歷,前序遍歷的結果應當為:
1,2,4,5,3,6,7
【思路分析】
這個需求實際上是在考察順序儲存二叉樹的重要特徵:第 n 個元素的左子節點為 2n+1、右子節點為 2n+2。
根據它的特徵我們可以知道:第 0 個元素 arr[0]
的左子節點為 arr[1]
、右子節點為 arr[2]
;第 1 個元素 arr[1]
arr[3]
、右子節點為 arr[4]
…
【程式碼實現】
利用順序儲存二叉樹的公式,我們可以很容易寫出對陣列以二叉樹形式的前序遍歷:
/**
* 順序儲存二叉樹
*/
class ArrayBinaryTree{
int[] arr; // 陣列
public ArrayBinaryTree(int[] arr){
this.arr = arr;
}
/**
* 前序遍歷:根->左->右
* @param index 陣列索引,也即第幾個元素
*/
public void preOrder (int index){
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); // 最後列印右子樹
}
}
}
執行結果如下: