1、常规的层序遍历如下:
void levelOrder(TreeNode* root) {
if (!root) {
return;
}
std::queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
// 每次循环中,处理队头元素,并将队头元素的孩子入队
TreeNode* node = q.front();
std::cout << node->val << " ";
q.pop();
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
经过一些修改之后,可以在遍历的同时获取二叉树的高度
// result的长度就是二叉树的高度
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result; // 存储最终结果(按层分组)
if (!root) return result; // 空树直接返回
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int levelSize = q.size(); // 当前层的节点数
vector<int> currentLevel; // 存储当前层的节点值
for (int i = 0; i < levelSize; ++i) {
TreeNode* node = q.front();
q.pop();
currentLevel.push_back(node->val);
// 将子节点入队
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
result.push_back(currentLevel); // 将当前层加入结果
}
return result;
}