给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
进阶:
递归法很简单,你可以使用迭代法完成此题吗?
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
示例 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,6,7,11,14,4,8,12,5,9,13,10]
递归方法
进阶提示里写的递归法很简单,那我们直接来看这种简单方法。
我们只需要一次对root的children进行遍历即可。
var preorder = function(root,ans=[]) {
if(!root) return [];
ans.push(root.val)
for(const child of root.children){
preorder(child,ans)
}
return ans
};
迭代方法
迭代方法我们需要用到栈来帮我们进行前序遍历,需要保证栈顶元素是我们当前需要遍历的结点。
我们先将根节点入栈,因为根节点是前序遍历的第一个节点,随后我们每次取出栈顶元素node,他是我们当前需要遍历的结点,将当前元素的值记录,并将其子结点逆序入栈。这样我们可以保证下一次出栈的是第一个子结点。
var preorder = function (root) {
let res = [];
if (!root) return res;
let stack = [];
stack.push(root);
while (stack.length != 0) {
let node = stack.pop();
res.push(node.val);
node.children.reverse()
stack.push(...node.children)
}
return res;
};