*数组创建二叉树即将 index * 2 + 1位置看作左节点,index 2 + 2看作右节点
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 1e5 + 5;
int tree[N];
void BuildTree(int root,string op)
{
int temp;
cin >> temp;
if (temp == -1)
return;
else
{
tree[root] = temp;
BuildTree(root * 2 + 1,"left");
BuildTree(root * 2 + 2,"right");
}
}
void PreOrder(int root)
{
if (tree[root] <= 0)
return;
cout << tree[root] << " ";
PreOrder(root * 2 + 1);
PreOrder(root * 2 + 2);
}
void MiddleOrder(int root)
{
if (tree[root] <= 0)
return;
MiddleOrder(root * 2 + 1);
cout << tree[root] << " ";
MiddleOrder(root * 2 + 2);
}
void LastOrder(int root)
{
if (tree[root] <= 0)
return;
LastOrder(root * 2 + 1);
LastOrder(root * 2 + 2);
cout << tree[root] << " ";
}
void bfs(int root)
{
queue<int> q;
q.push(root);
while (!q.empty())
{
cout << tree[q.front()] << " ";
int root = q.front();
q.pop();
if(tree[root * 2 + 1] != -1)
q.push(root * 2 + 1);
if (tree[root * 2 + 2] != -1)
q.push(root * 2 + 2);
}
}
int main()
{
memset(tree, -1, sizeof(tree));
BuildTree(0,"root");
cout << "先序遍历结果:";
PreOrder(0);
cout << endl;
cout << "中序遍历结果:";
MiddleOrder(0);
cout << endl;
cout << "后序遍历结果:";
LastOrder(0);
cout << endl;
cout << "层序遍历结果:";
bfs(0);
return 0;
}