LeetCode.144. 二叉树的前序遍历

题目

144. 二叉树的前序遍历

分析

这道题目是比较基础的题目,我们首先要知道二叉树的前序遍历是什么?

就是【根 左 右 】 的顺序,然后利用递归的思想,就可以得到这道题的答案,任何的递归都可以采用 的结构来实现,所以我会写两种方式来解决这道题目。

代码

递归版本

java 复制代码
/**
 * 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> res = new ArrayList<>();
        func(root,res);
        return res;
    }

    void func(TreeNode cur,List<Integer> res) {
        if(cur == null) return;
        // 先记录根节点
        res.add(cur.val);
        // 遍历左子树
        func(cur.left,res);
        // 遍历右子树
        func(cur.right,res);
    }
}

非递归版本

需要借助栈这种数据结构,先把根节点入栈,判断栈是否为空,不为空弹出来栈顶元素,栈顶元素不为空,先把右子树加入栈里面,再把左子树加入栈里面,为空继续遍历栈。

java 复制代码
/**
 * 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> res = new ArrayList<>();
        Stack<TreeNode> s = new Stack<>();
        s.push(root);
        while(!s.isEmpty()) {
            TreeNode node = s.pop();
            if(node != null) {
                res.add(node.val);
                
            }else {
                continue;
            }
            s.push(node.right);
            s.push(node.left);
        }
        return res;
    }

 
}
相关推荐
真的想上岸啊2 分钟前
c语言第一个小游戏:贪吃蛇小游戏05
c语言·算法·链表
香饽饽~、11 分钟前
函数式方法的实现(JDK8+)
java·服务器
付朝鲜22 分钟前
用自写的jQuery库+Ajax实现了省市联动
java·前端·javascript·ajax·jquery
小赵面校招25 分钟前
Spring Boot整合MyBatis全攻略:原理剖析与最佳实践
java·spring boot·mybatis
元亓亓亓26 分钟前
LeetCode热题100--206.反转链表--简单
算法·leetcode·链表
曼岛_28 分钟前
[Java实战]Spring Boot 3 整合 Ehcache 3(十九)
java·spring boot·spring
意倾城29 分钟前
Spring Boot 配置文件敏感信息加密:Jasypt 实战
java·spring boot·后端
曼岛_30 分钟前
[Java实战]Spring Boot 3 整合 Apache Shiro(二十一)
java·spring boot·apache
火皇40530 分钟前
Spring Boot 使用 OSHI 实现系统运行状态监控接口
java·spring boot·后端
边跑边掩护32 分钟前
LeetCode 373 查找和最小的 K 对数字题解
leetcode