二叉樹順序結構的存儲實現是用數組存儲的,使用下標存儲第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;
}
測試的完全二叉樹