LeetCode 144. Binary Tree Preorder Traversal

来源:互联网 发布:逆波兰算法 java 编辑:程序博客网 时间:2024/05/18 00:35

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

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [1,2,3].

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

这个是很基本的问题了,采用了两种方式,递归和迭代。

递归版

    public List<Integer> preorderTraversal(TreeNode root) {        List<Integer> list = new LinkedList<Integer>();        Stack<TreeNode> stack = new Stack<>();        if(root==null) return list;        while(root != null || stack.size() >0){            if(root == null) root =stack.pop();            list.add(root.val);            if(root.right != null) stack.add(root.right);            root =root.left;        }        return list;        //return preorderTraversalHelper(root, list);    }

迭代版

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    private List<Integer> preorderTraversalHelper(TreeNode root, List<Integer> list){        if(root != null){           list.add(root.val);           preorderTraversalHelper(root.left, list);           preorderTraversalHelper(root.right, list);        }        return list;                    }    public List<Integer> preorderTraversal(TreeNode root) {        List<Integer> list = new LinkedList<Integer>();        return preorderTraversalHelper(root, list);    }}
两个算法时间复杂度为O(N),空间复杂度分别为O(1) 和O(N)。

0 0
原创粉丝点击