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

题目描述

给定一个二叉树,返回它的 前序 遍历。

 示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

1、通过递归实现
2、通过迭代实现

具体实现

递归:

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

迭代:

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        if(root == null){
            return result;
        }
        TreeNode node = root;
        //初始化一个栈用来暂存节点
        Deque<TreeNode> stack = new LinkedList<>();
        //树节点没遍历完或者栈不为空则继续
        while(node != null || !stack.isEmpty()){
            //一直向左走,直到头
            while(node != null){
                //存入当前节点
                result.add(node.val);
                stack.push(node);
                node = node.left;
            }
            //向左到头后,从栈中拿到他的父节点,通过父节点找到其右兄弟
            node = stack.pop();
            node = node.right;
        }
        return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。