面向小白的力扣589. N 叉树的前序遍历

97 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

今天,我们继续搞算法。

题目描述

给定一个 n 叉树的根节点  root ,返回 其节点值的 前序遍历 。

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。

image.png

题目分析

这个题目是让我们返回 其节点值的 前序遍历

前序遍历很简单就是先根再孩子,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;
}



总结

本题我们是使用了递归来遍历树,递归是隐式调用栈的一种实现,在前序遍历中,我们会先遍历节点本身,然后从左向右依次先序遍历该每个以子节点为根的子树。我们先放根的值,然后再找他们的孩子,这样递归到最后一层,左孩子或者右孩子为空时,开始出栈,放值,等全部递归完成后,我们的结果也有了。