1. 程式人生 > 其它 >LeetCode-429 N叉樹的層次遍歷

LeetCode-429 N叉樹的層次遍歷

來源:力扣(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; } };

 

執行結果