【數據結構】二叉樹順序存儲結構實現

二叉樹順序結構的存儲實現是用數組存儲的,使用下標存儲第i個節點。

二叉樹的順序存儲結構非常適合存儲滿二叉樹,這使得二叉樹的存儲佔用最少。在數組中完全二叉樹中沒有雙親節點的值用0填充。
在這裏插入圖片描述

二叉樹順序存儲結構實現

/*
	* 二叉樹的順序存儲結構使用數組存儲
	* 以節點編號存儲在數組中, 例如節點1就存儲在數組索引爲1的存儲單元中
	* 對於完全二叉樹, 按照層序存儲即可
	特點:適合存儲滿二叉樹
*/

#include<iostream>

#define MAX_SIZE 100
#define OK 1
#define ERROR 0
using namespace std;

typedef int Status;

typedef int TElemType;

typedef TElemType SqBiTree[MAX_SIZE];


void initSQBiTree(SqBiTree &T) {
    for (int i = 0; i < MAX_SIZE; i++) {
        T[i] = 0;
    }
}

/*
 * 爲第i個節點設置值
 */
Status setNode(SqBiTree &T, int i, TElemType e) {
    if (T == NULL) return ERROR;
    if (i >= MAX_SIZE)return ERROR;
    T[i] = e;
    return OK;
}

/*
 * 爲第i個節點的左孩子設置值
 */
Status setLeftChild(SqBiTree &T, int i, TElemType e) {
    if (T == NULL)return ERROR;
    if (i * 2 >= MAX_SIZE)return ERROR;
    T[i * 2] = e;
    return OK;
}


/*
 * 爲第i個節點的右孩子設置值
 */
Status setRightChild(SqBiTree &T, int i, TElemType e) {
    if (T == NULL) return ERROR;
    if (i * 2 + 1 >= MAX_SIZE) return ERROR;
    T[i * 2 + 1] = e;
    return OK;
}


void printTree(SqBiTree T) {
    for (int i = 1; i < MAX_SIZE; i++) {
        cout << "第" << i << "個節點值爲:" << T[i] << endl;
    }
}


int main() {
    SqBiTree T;
    initSQBiTree(T);

    setNode(T,1,1);
    setLeftChild(T,1,2);
    setRightChild(T,1,4);

    setLeftChild(T,3,6);
    setRightChild(T,3,7);

    printTree(T);

    return 0;
}

測試的完全二叉樹
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章