【LeetCode】144. Binary Tree Preorder Traversal

Difficulty: Medium

 More:【目录】LeetCode Java实现

Description

https://leetcode.com/problems/binary-tree-preorder-traversal/

Given a binary tree, return the preordertraversal of its nodes' values.

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [1,2,3]

Follow up: Recursive solution is trivial, could you do it iteratively?

Intuition

 Stack

 

Solution

    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        Stack<TreeNode> stk = new Stack<>();
        while(root!=null || !stk.isEmpty()){
            while(root!=null){
                list.add(root.val);
                stk.push(root);
                root=root.left;
            }
            root=stk.pop().right;
        }
        return list;
    }

OR

    public List<Integer> preorderTraversal(TreeNode root) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        Stack<TreeNode> stk = new Stack<>();
        stk.push(root);
        while(!stk.isEmpty()){
            TreeNode node = stk.pop();
            if(node==null)
                continue;
            list.add(node.val);
            stk.push(node.right);
            stk.push(node.left);
        }
        return list;
    }

  

 

Complexity

Time complexity : O(n)

Space complexity : O(nlogn)

 

 

 More:【目录】LeetCode Java实现

 

posted @ 2019-11-04 11:24  华仔要长胖  阅读(197)  评论(0编辑  收藏  举报