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

题目描述:

image.png

题目链接:LeetCode-144-二叉树的前序遍历

递归法

解题思路:
方法一:递归。
要先清楚前序遍历的顺序:先根节点,再左子树,再右子树。
然后是递归三部曲:

  1. 确定递归函数的参数和返回值:这里直接使用力扣给的函数即可,不需要额外定义;
  2. 终止条件:当当前遍历的节点为null 的时候结束递归;
  3. 确定单层递归的逻辑:也就是递归的顺序:先根节点,再左子树,再右子树。

代码实现:

class Solution {
    List<Integer> list = new ArrayList<>();
    public List<Integer> preorderTraversal(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        list.add(root.val);
        preorderTraversal(root.left);
        preorderTraversal(root.right);
        return list;
    }
}

非递归法

解题思路:
方法二:非递归
要先清楚前序遍历的顺序:先根节点,再左子树,再右子树。
利用 的特点:”先进后出“,来存放遍历的节点。
前序遍历:中左右。 则 入栈顺序: 中->右->左

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        if (root == null) {
            return new ArrayList<>();
        }
        stack.push(root);// 根节点先入栈
        // 前序遍历:中左右  入栈顺序: 中->右->左
        // 开始处理栈,先放右孩子,再放左孩子,这样出栈的顺序才是 前序遍历的顺序
        while (!stack.isEmpty()) {
            TreeNode tmp = stack.pop();
            if (tmp != null) {// 加一个判断,不为空再加入
                list.add(tmp.val);// 加到数组中
            } else {
                continue;
            }
            stack.push(tmp.right);// 依次加入右孩子和左孩子
            stack.push(tmp.left);
        }
        return list;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值