从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
节点总数 <= 1000
注意:本题与主站 102 题相同:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root == nullptr) return {};
vector<vector<int>> ans;
vector<TreeNode*> cur = {root};
while(cur.size()){
vector<TreeNode*> nxt;
vector<int> vals;
for(auto node:cur){
vals.push_back(node->val);
if(node->left) nxt.push_back(node->left);
if(node->right) nxt.push_back(node->right);
}
cur=move(nxt);
ans.emplace_back(vals);
}
return ans;
}
};
这段代码实现了二叉树的层序遍历,返回一个二维数组表示每一层的节点值。
首先判断根节点是否为空,如果是空树,则返回一个空数组。
然后定义一个二维数组ans来存储结果,定义一个向量cur来存储当前层的节点。
利用while循环来遍历每一层的节点,直到cur为空。
在每一层的循环中,定义一个向量nxt来存储下一层的节点,定义一个向量vals来存储当前层节点的值。
遍历当前层节点的过程中,将节点的值添加到vals中,同时将其左右孩子节点添加到nxt中。
然后将nxt赋值给cur,准备遍历下一层。
最后将vals添加到ans中。
最后返回ans即可。
这段代码的时间复杂度为O(n),其中n是二叉树中节点的个数。