0429-N叉树的层序遍历

给定一个 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] 之间

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal

python

# 0429.N叉树的层序遍历
class Solution:
    def levelOrder(self, root: Node) -> [[int]]:
        """
        迭代法:双端队列,每次把单层的节点遍历出队列,另外将对应的children节点加入队列
        :param root:
        :return:
        """
        results = []
        if not root:
            return results

        from collections import deque
        queue = deque([root]) # 初始化队列

        while queue:
            size = len(queue) # 遍历队列单层长度
            res = [] # 每次遍历时初始化加入结果集中的列表
            for _ in range(size):
                cur = queue.popleft() # 通过size控制遍历次数
                res.append(cur.val) # 加入结果集中
                if cur.children: # 扩展到子节点
                    queue.extend(cur.children)
            results.append(res) # 当层中的所有节点的值放入list中

        return results

golang

package binaryTree

import "container/list"

type Node struct {
	Val int
	Children []int
}

// 迭代遍历
func levelOrder(root *Node) [][]int {
	var res = [][]int{}
	if root == nil { // 空时返回
		return res
	}
	queue := list.New() // 队列初始化
	queue.PushBack(root)

	for queue.Len() > 0 {
		length := queue.Len()
		var tmpArr []int
		for i := 0; i < length; i++ { // 遍历当层的节点
			node := queue.Remove(queue.Front()).(*Node) // 当次节点
			tmpArr = append(tmpArr, node.Val) // 节点值加入结果集
			// 子节点群加入队列中
			for i:=0;i<len(node.Children);i++ {
				queue.PushBack(node.Children[i])
			}
		}
		res = append(res, tmpArr)
	}
	return res
}

posted on 2021-11-13 22:33  进击的davis  阅读(148)  评论(0编辑  收藏  举报

导航