题目来源
力扣102二叉树的层序遍历
题目概述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路分析
很常规的层序遍历题,使用list保存本层节点即可。
代码实现
java实现
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
// 父节点列表
List<TreeNode> parentList = new ArrayList<>();
parentList.add(root);
while (!parentList.isEmpty()) {
// 孩子节点列表
List<TreeNode> sonList = new ArrayList<>();
for (TreeNode parent : parentList) {
if (parent.left != null) {
sonList.add(parent.left);
}
if (parent.right != null) {
sonList.add(parent.right);
}
}
// 父节点转val
res.add(parentList.stream().map(node -> node.val).collect(Collectors.toList()));
parentList = sonList;
}
return res;
}
}
c++实现
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if (root == nullptr) {
return res;
}
vector<TreeNode*> parentList;
parentList.push_back(root);
while (!parentList.empty()) {
vector<TreeNode*> sonList;
vector<int> temp;
// 遍历父节点列表,找子节点、转val
for (auto parent : parentList) {
temp.push_back(parent->val);
if (parent->left != nullptr) {
sonList.push_back(parent->left);
}
if (parent->right != nullptr) {
sonList.push_back(parent->right);
}
}
res.push_back(temp);
parentList = sonList;
}
return res;
}
}