持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
今天,我们继续搞算法。
题目描述
给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
题目分析
这个题目是让我们返回 其节点值的 前序遍历
前序遍历很简单就是先根再孩子,root = [1,null,3,2,4,null,5,6]这个1是根,然后每一层是用null分开,下一层依次是3,2,4,然后3的左孩子是5,右孩子是6,前序遍历就是先根,1,再孩子,是3,3的左右孩子5,6,然后是4,左右孩子都没有,接着就是2,程序结束。
解题思路
- 确定操作对象:本题中,操作对象1个root
- 确定操作条件:如果数为空返回。
- 确定操作过程:操作过程为,将根的值取出放序列中,在遍历根的孩子。
- 确定结果返回:返回最终结果。
代码
/*
// 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 {
public List<Integer> preorder(Node root) {
seq = new ArrayList<Integer>();
dfs(root);
return seq;
}
public void dfs(Node root) {
if(root == null) return ;
seq.add(root.val);
for(Node children : root.children){
dfs(children);
}
}
List<Integer> seq;
}
总结
本题我们是使用了递归来遍历树,递归是隐式调用栈的一种实现,在前序遍历中,我们会先遍历节点本身,然后从左向右依次先序遍历该每个以子节点为根的子树。我们先放根的值,然后再找他们的孩子,这样递归到最后一层,左孩子或者右孩子为空时,开始出栈,放值,等全部递归完成后,我们的结果也有了。