【LeetCode-简单题】589. N 叉树的前序遍历

文章目录

题目

方法一:单循环栈做法

关键在于子节点的入栈顺序,决定了子节点的出栈顺序,

因为是前序遍历 所以压栈顺序先让右边的入栈 依次往左 这样左边的节点会在栈顶 这样下次优先出栈的是左边的元素 满足前序遍历

java 复制代码
 for(int i = root.children.size()-1 ; i>=0 ;i--)
                stack.push(root.children.get(i));
java 复制代码
class Solution {
    public List<Integer> preorder(Node root) {
        if(root==null) return new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        Deque<Node> stack = new LinkedList<>();
        stack.push(root);
        while(!stack.isEmpty()){
            root  = stack.pop();
            res.add(root.val);

            //因为是前序遍历  所以压栈顺序先让右边的入栈  依次往左  这样左边的节点会在栈顶 这样下次优先出栈的是左边的元素 满足前序遍历
            for(int i = root.children.size()-1 ; i>=0 ;i--)
                stack.push(root.children.get(i));
        }
        return res;
    }
}

方法二:递归

原理和二叉树的前序遍历一样 相当于把左右孩子 改成孩子集合了 孩子变多了而已,核心还是 根左右(先跟 再左孩子 在右孩子)

java 复制代码
class Solution {
    List<Integer> res = new ArrayList<>();
    public List<Integer> preorder(Node root) {
        dfs(root);
        return res;
    }
    public void dfs(Node root){
        if(root == null) return;
        res.add(root.val);//前
        for(Node node : root.children)//中中中中中
        dfs(node);
    }
}
相关推荐
LYFlied16 分钟前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
长安er2 小时前
LeetCode 20/155/394/739/84/42/单调栈核心原理与经典题型全解析
数据结构·算法·leetcode·动态规划·
MarkHD2 小时前
智能体在车联网中的应用:第28天 深度强化学习实战:从原理到实现——掌握近端策略优化(PPO)算法
算法
能源系统预测和优化研究2 小时前
【原创代码改进】考虑共享储能接入的工业园区多类型负荷需求响应经济运行研究
大数据·算法
yoke菜籽2 小时前
LeetCode——三指针
算法·leetcode·职场和发展
小高不明3 小时前
前缀和一维/二维-复习篇
开发语言·算法
bin91533 小时前
当AI优化搜索引擎算法:Go初级开发者的创意突围实战指南
人工智能·算法·搜索引擎·工具·ai工具
曹牧4 小时前
Java:Math.abs()‌
java·开发语言·算法
天才测试猿4 小时前
2026全新软件测试面试八股文【含答案+文档】
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
CoovallyAIHub5 小时前
纯视觉的终结?顶会趋势:不会联觉(多模态)的CV不是好AI
深度学习·算法·计算机视觉