LeetCode-429 N叉樹的層次遍歷
阿新 • • 發佈:2022-04-08
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給定一個 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]]
提示:
樹的高度不會超過 1000
樹的節點總數在 [0, 10^4] 之間
解題思路
利用一個佇列記錄當前層的結點,一個佇列記錄下一層的結點,遍歷當前層就將下一層作為當前層進行遍歷。注意判斷結點為空的條件
程式碼展示
/* // 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) { vector<vector<int>> vviRet; queue<Node*> visiting; if(!root) return vviRet; visiting.push(root); while(!visiting.empty()) { queue<Node*> ch = visiting; visiting = queue<Node*>(); vector<int> viRet; while(!ch.empty()) { auto p = ch.front(); ch.pop(); viRet.push_back(p->val); for(auto iter: p->children) if(iter) visiting.push(iter); } vviRet.push_back(viRet); } return vviRet; } };
執行結果