中序遍历 权值呈递增序列
题目给出的是节点序号间的关系 就用二叉树的静态写法会比较方便
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 110;
struct node
{
int data;
int lchild,rchild;
}Node[maxn];
int vi[maxn];
int num = 0,n;
void inorder(int root)
{
if(root == -1) return;
inorder(Node[root].lchild);
Node[root].data = vi[num++];
inorder(Node[root].rchild);
}
int cont = 0;
void BFS()
{
queue<int> q;
q.push(0);
while(!q.empty())
{
int now = q.front();
q.pop();
cont++;
if(cont > n) return;
cout << Node[now].data;
if(cont < n) cout << " ";
if(Node[now].lchild != -1) q.push(Node[now].lchild);
if(Node[now].rchild != -1) q.push(Node[now].rchild);
}
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> Node[i].lchild >> Node[i].rchild;
}
for(int i = 0; i < n; i++)
{
cin >> vi[i];
}
sort(vi, vi + n);
inorder(0);
BFS();
return 0;
}
一遍过哈哈哈哈 我好牛(不是