完全二叉树的定义与基本性质
完全二叉树的数组表示法
- 对于一棵具有 n 个结点的完全二叉树,对于任意一个结点,编号为 i
if (i > 1) 父结点编号 i / 2
if (2 i > n) 没有左儿子 else 左儿子编号为 2 i
if (2 i + 1 > n) 没有右儿子 else 右儿子编号为 2 i + 1
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
char data[N];
int node[N];
int n;
void pre_order(int i){
if (data[i] == '$') return ;
if (data[i] != '$') cout << data[i];
if (i * 2 <= n) pre_order(i * 2);
if (i * 2 + 1 <= n) pre_order(i * 2 + 1);
}
void in_order(int i){
if (data[i] == '$') return ;
if (i * 2 <= n) in_order(i * 2);
if (data[i] != 'S') cout << data[i];
if (i * 2 + 1 <= n) in_order(i * 2 + 1);
}
void post_order(int i){
if (data[i] == '$') return ;
if (i * 2 <= n) post_order(i * 2);
if (i * 2 + 1 <= n) post_order(i * 2 + 1);
if (data[i] != 'S') cout << data[i];
}
int main(){
memset(data, '$', sizeof data);
cin >> n; // 结点总数
for (int i = 1; i <= n; i++) cin >> data[i]; // 根结点下标是1,从上到下,从左到右输入
pre_order(1);
puts("");
in_order(1);
puts("");
post_order(1);
puts("");
return 0;
}
/*
输入:
3
A B C
输出:
ABC
BAC
BCA
*/