携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
题目
给定一个 n 叉树 的根节点 root
,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null
分隔(请参见示例)。
示例
输入: root = [1,null,3,2,4,null,5,6]
输出: [1,3,5,6,2,4]
输入: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]
提示
- 节点总数在范围 [
0, 10
]内 0 <= Node.val <= 10
- n 叉树的高度小于或等于
1000
N叉树的前序遍历
树的遍历:
- 前序遍历:首先访问根节点,然后遍历左节点,再遍历右节点;
- 中序遍历:首先遍历左节点,然后访问根节点,再遍历右节点;
- 后序遍历:首先遍历左节点,然后遍历右节点,再访问根节点;
- 层序遍历:按照从左到右的顺序,逐层遍历各个节点。
在二叉树中,有前、中、后序以及层序可以进行遍历,这些遍历的方法,前、后、层序遍历同样可以运用到N叉树中。至于中序遍历,由于并没有一个明确的标准来定义,其中间点因人而异,故暂不考虑N叉树的中序遍历
将二叉树转化成N叉树,我们只需要将其左右节点的遍历修改为对所有子节点的遍历即可,常规的方式有for循环遍历等。
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
List<Integer> list = new ArrayList<>();
public List<Integer> preorder(Node root) {
// 边界判断
if(null != root){
// 先访问根节点
list.add(root.val);
// 再访问所有的子节点
for(Node node : root.children){
preorder(node);
}
}
// 返回结果
return list;
}
}