顺序存储一棵完全二叉树结点记录,结点个数为n。根据所输入的顺序结构记录建立二叉树,输出树的先序,中序和后序遍历结果。
这个就是二叉树最简单的前序、中序、后序遍历,不难,代码量也很小。主要是理解递归。
#include <iostream>
using namespace std;
int cnt =0;
int a1 = 0;
int b1 = 0;
int c1 = 0;
class BiTree {
public:
BiTree() {
}
BiTree(int n) {
num = n;
data = new int[n];
for (int i = 0; i < n; i++) {
cin >> data[i];
}
};
void Pre(int x);
void Mid(int x);
void Post(int x);
void Print();
private:
int* data;
int num;
int a[1000];
int b[1000];
int c[1000];
};
int main() {
int n;
cin >> n;
BiTree t(n);
t.Pre(0);
t.Mid(0);
t.Post(0);
t. Print();
}
void BiTree::Pre(int x)
{
if (data[x] == 0 || x > num - 1)
return;
int n = x + 1;
int left = 2 * n;
int right = 2 * n + 1;
a[a1++] = data[x];
Pre(left - 1);
Pre(right - 1);
}
void BiTree::Mid(int x)
{
if (data[x] == 0 || x > num - 1) {
cnt++;
return;
}
cnt++;
int n = x + 1;
int left = 2 * n;
int right = 2 * n + 1;
Mid(left - 1);
b[b1++] = data[x];
Mid(right - 1);
}
void BiTree::Post(int x)
{
if (data[x] == 0 || x > num - 1)
return;
int n = x + 1;
int left = 2 * n;
int right = 2 * n + 1;
Post(left - 1);
Post(right - 1);
c[c1++] = data[x];
}
void BiTree::Print()
{
for (int i = 0; i < a1 - 1; i++)
cout << a[i] << " ";
cout << a[a1-1] << endl;
for (int i = 0; i < b1 - 1; i++)
cout << b[i] << " ";
cout << b[b1 - 1] << endl;
for (int i = 0; i < c1 - 1; i++)
cout << c[i] << " ";
cout << c[c1 - 1] << endl;
}