1. 程式人生 > 其它 >hbase安裝與配置(偽分步)

hbase安裝與配置(偽分步)

技術標籤:演算法與資料結構二叉樹順序二叉樹資料結構

一、順序儲存二叉樹概述

從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列。順序結構儲存就是使用陣列來儲存,一般使用陣列只適合表示完全二叉樹,因為不完全二叉樹會有空間的浪費。

下圖就是樹和陣列對應的關係圖:

在這裡插入圖片描述

順序二叉樹有下面幾個顯著的特徵(n 表示二叉樹中的第幾個元素,從 0 開始):

  1. 第 n 個元素的左子節點為第 2 * n + 1 個元素;
  2. 第 n 個元素的右子節點為第 2 * n + 2 個元素;
  3. 第 n 個元素的父節點為第 ( n - 1 ) / 2 個元素。

我們隨便選兩個節點來驗證其中一個特性。比如 元素2 是第 1 個元素,對應陣列中的 arr[1]

,則根據公式 元素2 的左子節點應當為 2*1+1 = 3,也就是第 3 個元素,對應陣列中的 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); // 最後列印右子樹 } } }

執行結果如下:

在這裡插入圖片描述