429. N 叉树的层序遍历(2022-4-9)
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
详细示例请移步官网查看
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]
解题思路
层序遍历:维护一个队列,进行bfs就可以了;children
保存的是下一层的所有节点,遍历完当前层,直接替换list
去遍历下一层。
ok既然写到了N叉树的遍历,就顺带复习一下「前序遍历」和「后序遍历」。
「前序遍历」:维护一个栈,保证左边的节点在栈尾,让右边的节点先入栈。这里是直接把所有子节点推进栈,栈尾的自然就是最左的节点。
「后序遍历」:同样是一个栈,不同的是保证右节点在栈尾,左节点先入栈。直接一个个遍历入栈就可以了。
var levelOrder = function(root) {
let list = [],ret = []
if(root != null) list.push(root)
// 层序遍历
while(list.length){
let children = [],curVal = []
for(const node of list){
curVal.push(node.val)
children = [...children,...node.children]
}
ret.push(curVal)
list = children
}
return ret
// 前序遍历
while(list.length){
let node = list.shift()
ret.push(node.val)
if(node.children) list.unshift(...node.children)
}
console.log(ret)
// 后序遍历
while(list.length){
let node = list.pop()
ret.push(node.val)
if( !node.children) continue
for(let child of node.children){
list.push(child)
}
}
console.log(ret)
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。