来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
题目
给定一个 N 叉树,返回其节点值的_层序遍历_。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
思路
利用广度优先搜索进行遍历,一个队列存储树节点、一个队列存储对应树节点的高度,一个变量记录前一个节点所在高度,当前节点高度比前一个节点高时意味着到了下一层,将当前层存起来并清空。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
class Solution { public: vector<vector<int>> levelOrder(Node* root) { if (!root) { return { } ; } vector<vector<int>> ans; vector<int> curLev; int h; queue<Node*> nodeQ; queue<int> nodeH; nodeQ.push(root); nodeH.push(0); int preH = 0; while(!nodeQ.empty()) { Node* curNode = nodeQ.front(); nodeQ.pop(); int curH = nodeH.front(); nodeH.pop(); if (curH-preH == 1) { ans.push_back(curLev); preH = curH; curLev.clear(); } curLev.push_back(curNode->val); for (auto &child:curNode->children) { nodeQ.push(child); nodeH.push(curH+1); } } ans.push_back(curLev); return ans; } } ;
|