# include <bits/stdc++.h>
using namespace std;
int N;
struct Node{
int data;
int lchild, rchild;
Node(int d, int l, int r):data(d), lchild(l), rchild(r){}
// 没事写一下C++11的委托构造函数
Node( ):Node(0, -1, -1){}
Node(int d ):Node(d, -1, -1){}
Node(int l, int r):Node(0, l, r){}
}node[100];
int num[100];
int idx = 0;
void inOrder(int root){ // 中序遍历给结点赋值
if(root == -1) return;
inOrder(node[root].lchild);
node[root].data = num[idx++];
inOrder(node[root].rchild);
}
int cnt = 0;
void levelOrder(){ // 层序遍历输出结果
queue<int> q;
q.push(0);
while(!q.empty()){
int u = q.front();
q.pop();
cnt++;
cout << node[u].data << (cnt == N ? "\n" : " ");
if(node[u].lchild != -1) q.push(node[u].lchild);
if(node[u].rchild != -1) q.push(node[u].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 >> num[i];
sort(num, num+N);
inOrder(0);
levelOrder();
return 0;
}

02-08
191
191
07-27
373
373
该博客主要展示了如何使用C++进行二叉树的中序遍历和层序遍历。首先,定义了一个Node结构体表示二叉树节点,并实现了四种构造函数。接着,通过中序遍历为节点分配数值,然后利用层序遍历输出结果。程序读取二叉树的结构和节点值,对排序后的数值进行中序遍历赋值,最后按层次输出所有节点数据。

被折叠的 条评论
为什么被折叠?



