算法传统算法二叉树的遍历scandi2025-02-232026-01-07题目12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <iostream>#include <queue>using namespace std;struct ty{ int z, y;}a[500005];int vis[500005];void xian(int f){ cout << f << ' '; if (a[f].z) xian(a[f].z); if (a[f].y) xian(a[f].y); return ;}void zhong (int f){ if (a[f].z) zhong(a[f].z); cout << f << ' '; if (a[f].y) zhong(a[f].y); return ;}void hou(int f){ if (a[f].z) hou(a[f].z); if (a[f].y) hou(a[f].y); cout << f << ' '; return ;}void ceng(int f){ queue<int> q; q.push(f); while (q.size()) { int y = q.front(); q.pop(); cout << y << ' '; if (a[y].z) q.push(a[y].z); if (a[y].y) q.push(a[y].y); } return ;}int main(){ int n; cin >> n; int f = 0; for (int i = 1; i < n; i++) { int u, v, op; cin >> u >> v >> op; vis[u] = 1; if (op == 0) a[v].z = u; else a[v].y = u; } for (int i = 1; i < n; i++) if (vis[i] == 0) f = i; xian(f); cout << endl; zhong(f); cout << endl; hou(f); cout << endl; ceng(f); return 0;}