144. 二叉树的前序遍历 + 前序递归 + 非递归前序遍历

144. 二叉树的前序遍历

LeetCode_144

题目描述

方法一:递归法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        dfs(root, list);
        return list;
    }
    void dfs(TreeNode root, List<Integer> list){
        if(root == null)
            return;
        list.add(root.val);
        dfs(root.left, list);
        dfs(root.right, list);
    }
}

方法二:非递归前序遍历

  1. 非递归的方法可以使用栈来模拟递归的思路。
  2. 前序递归的方法为:中 =》 左 =》 右,所以使用栈时可以先存储根节点的值,然后将右结点进栈,最后将左节点进栈。
  3. 值得一提的是:在后序遍历的情况下:可以使用栈先将左子树结点进栈,再将右子树进栈,最后reverse整个list就是答案。因为 中=》右=》左 逆转后就是后序遍历的顺序。
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        
        List<Integer> list = new ArrayList<>();
        if(root == null)
            return list;
        Stack<TreeNode> sta = new Stack<>();
        sta.push(root);
        while(!sta.isEmpty()){
            TreeNode now = sta.pop();
            list.add(now.val);
            if(now.right != null)
                sta.push(now.right);
            if(now.left != null)
                sta.push(now.left);
        }
        return list;
    }
}
posted @   Garrett_Wale  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2020-03-16 蓝桥杯-斐波那契
点击右上角即可分享
微信分享提示