Files
exercises/JLOI2009_binary_tree_GIVEUP.cpp
T
2026-09-09 13:38:11 +08:00

65 lines
1.4 KiB
C++

#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
class BinaryTree {
public:
struct Node {
int left = -1, right = -1, father = -1;
};
vector<Node> nodes;
int depth = -1, breadth = -1;
void connect(int father, int son) {
assert(father < nodes.size() && son < nodes.size());
if (nodes[son].father != -1 && nodes[father].father == -1) { swap(father, son); }
nodes[son].father = father;
if (nodes[father].left == -1) {
nodes[father].left = son;
} else {
nodes[father].right = son;
}
}
void dfs() {
depth = -1, breadth = -1;
vector<int> depths_map;
dfs(0, 0, depths_map);
for (const int d : depths_map) {
breadth = max(breadth, d);
}
}
void dfs(int node_idx, int _depth, vector<int>& depths_map) {
depth = max(depth, _depth);
if (_depth >= depths_map.size()) {
depths_map.push_back(0);
}
depths_map[_depth]++;
if (nodes[node_idx].left != -1) {
dfs(nodes[node_idx].left, _depth + 1, depths_map);
}
if (nodes[node_idx].right != -1) {
dfs(nodes[node_idx].right, _depth + 1, depths_map);
}
}
};
BinaryTree tree;
int n;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
tree.nodes.resize(n);
return 0;
}