当前位置: 代码迷 >> 综合 >> leetcode429 N-ary Tree Level Order Traversal(N叉树的层序遍历)
  详细解决方案

leetcode429 N-ary Tree Level Order Traversal(N叉树的层序遍历)

热度:40   发布时间:2023-11-17 01:19:03.0

题目要求

给定一个N叉树,返回节点值的层序遍历结果。
(tips:从左到右,一层一层)以一个三叉树为例。
在这里插入图片描述

输入如上图

 层序遍历结果如下:
[[1],[3,2,4],[5,6]
]

解题思路

根据输入示例的结果形式可知,我们需要两个vector来辅助解答。
一个vector存放每一层的遍历结果,一个vector存放最后的整体结果。

有了二叉树的层序遍历基础,我们可以很快的写出代码,这里边唯一的不同,或者说难点就是,二叉树最多只有两个子节点,我们只要分别把他们加入到队列中就可以保证继续迭代。
本题难点是:但对于多叉树我们有很多个子节点,如何把所有子节点加入到队列中呢?
答案:根据多叉树的性质,我们使用for(auto child:tmp->children)迭代,将当前节点所有的孩子依次添加到队列中即可。

主要代码(c++)

/* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val = _val;children = _children;} }; */
class Solution {
    
public:vector<vector<int>> levelOrder(Node* root) {
    if(root ==NULL) return {
    };vector<vector<int>>res;queue<Node*>q;q.push(root);while(!q.empty()){
    int size = q.size();vector<int>currentlevel;for(int i=0; i<size; ++i){
    Node *tmp = q.front(); q.pop();currentlevel.push_back(tmp->val);for(auto child:tmp->children) // 这里和二叉树不同q.push(child);}res.push_back(currentlevel);}return res;}
};
""" # Definition for a Node. class Node(object):def __init__(self, val, children):self.val = valself.children = children """
class Solution(object):def levelOrder(self, root):""":type root: Node:rtype: List[List[int]]"""if root is None:return rootqueue = [root]res = []while queue:level = []size = len(queue)for i in range(size):node = queue.pop(0)level.append(node.val)# 把孩子加入队列,二叉树是left, rightfor node in node.children[::1]:queue.append(node)res.append(level)return res

划重点:

有关层序遍历的迭代记得用 队列哈!!! 题目不难注意和二叉树的不同

相似题目:
解答:leetcode102 Binary Tree Level Order Traversal (二叉树的层序遍历)
解答:leetcode107 Binary Tree Level Order Traversal 2 (二叉树的层序遍历2)
解答:leetcode 637 Average of Levels in Binary Tree (输出二叉树每层节点值的平均值)

原题链接:https://leetcode.com/problems/n-ary-tree-level-order-traversal/

  相关解决方案