题目
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6] 输出:[[1],[3,2,4],[5,6]]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] 输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
解题
children是以列表的形式存储每个节点的
python写法
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children """ class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: if not root: return [] res = [] queue = [root] while queue: l = len(queue) tmp = [] for _ in range(l): cur = queue.pop(0) tmp.append(cur.val) for child in cur.children: # 修改的部分 if child: queue.append(child) res.append(tmp) return res
c++写法
/* // Definition for a Node. class Node { public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val; children = _children; } }; */ class Solution { public: vector<vector<int>> levelOrder(Node* root) { if(!root) return {}; vector<vector<int>> res; queue<Node*> queue; queue.push(root); while(!queue.empty()){ int l=queue.size(); vector<int> tmp; for(int i=0;i<l;i++){ Node* cur=queue.front(); queue.pop(); tmp.push_back(cur->val); for(Node* child:cur->children){ if(child) queue.push(child); } } res.push_back(tmp); } return res; } };