- N 叉树的层序遍历
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> ret;
if (root == nullptr) return ret;
queue<Node*> q;
q.push(root);
ret.push_back({root->val});
int size = 1;
while (!q.empty()) {
vector<int> v;
while (size--) {
Node* front = q.front();
q.pop();
for (Node* e : front->children) {
if (e != nullptr) {
q.push(e);
v.push_back(e->val);
}
}
}
if (!v.empty()) {
ret.push_back(v);
}
size = q.size();
}
return ret;
}
- 二叉树的锯齿形层序遍历
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> ret;
if (root == nullptr) return ret;
queue<TreeNode*> q;
q.push(root);
int level = 1;
while (!q.empty()) {
vector<int> v;
int size = q.size();
while (size--) {
TreeNode* front = q.front();
q.pop();
v.push_back(front->val);
if (front->left != nullptr) {
q.push(front->left);
}
if (front->right != nullptr) {
q.push(front->right);
}
}
if (level % 2 == 0) {
reverse(v.begin(), v.end());
}
ret.push_back(v);
++level;
}
return ret;
}
- 二叉树最大宽度
int widthOfBinaryTree(TreeNode* root) {
vector<pair<TreeNode*, unsigned int>> vp_prev = { {root, 1} };
unsigned int max_size = 0;
while (!vp_prev.empty()) {
max_size = max(max_size, vp_prev.back().second - vp_prev.front().second + 1);
vector<pair<TreeNode*, unsigned int>> vp;
for (auto& [x, y] : vp_prev) {
if (x->left != nullptr) {
vp.push_back({ x->left, 2 * y });
}
if (x->right != nullptr) {
vp.push_back({ x->right, 2 * y + 1 });
}
}
vp_prev = vp;
}
return max_size;
}
- 在每个树行中找最大值
vector<int> largestValues(TreeNode* root) {
vector<int> ret;
if (root == nullptr) {
return ret;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int max_val = INT_MIN;
int size = q.size();
while (size--) {
TreeNode* front = q.front();
q.pop();
if (front->left != nullptr) {
q.push(front->left);
}
if (front->right != nullptr) {
q.push(front->right);
}
max_val = max(max_val, front->val);
}
ret.push_back(max_val);
}
return ret;
}