题意
给你一个最小堆的中序遍历,要求你输出他的层序遍历
题解
- 构建二叉树
- 层序遍历
#include <bits/stdc++.h>
using namespace std;
typedef struct BitNode{
int data;
struct BitNode *lchild, *rchild;
}BitNode, *BitTree;
int v[35];
void create(BitTree &p, int L, int R){
if (L > R) return;
int minidx = L;
for(int i = L; i <= R; i++){
if (v[i] < v[minidx]){
minidx = i;
}
}
p = (BitTree)malloc(sizeof(BitNode));
p->data = v[minidx];
//cout << v[minidx] << '\n';
create(p->lchild, L, minidx - 1);
create(p->rchild, minidx + 1, R);
}
int main(){
int n; cin >> n;
//输入的是中序遍历最小堆的情况
for(int i = 0; i < n; i++){
cin >> v[i];
}
BitTree ans;
create(ans, 0, n-1);
//层序遍历
queue<BitTree> q;
q.push(ans);
bool firstprint = true;
while(!q.empty()){
BitTree temp = q.front();
if (firstprint){
cout << temp->data;
firstprint = false;
}
else {
cout << " " << temp->data;
}
if(temp->lchild != NULL)
q.push(temp->lchild);
if (temp->rchild != NULL)
q.push(temp->rchild);
q.pop();
}
cout << '\n';
}