144. 二叉树的前序遍历

像这种遍历树的题目,简单的一种是用递归来做,可以参考下算法导论上面的伪代码来完成,

递归算法的时间复杂度为O(N)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        ArrayList <Integer> arrayList = new ArrayList<>();
        preorderTree(root,arrayList);
        return arrayList;
    }

    /**
       递归写法
     */

    private void  preorderTree(TreeNode treeNode, List list){
        if (treeNode == null || treeNode.val == 0){
            return;
        }
        list.add(treeNode.val);
        preorderTree(treeNode.left,list);
        preorderTree(treeNode.right,list);
    }
}

迭代写法

 public List<Integer> preorderTraversal(TreeNode root) {
        /**
         * 迭代写法
         */
        Stack<TreeNode> stack = new Stack<>();
        ArrayList <Integer> arrayList = new ArrayList<>();
        while (root != null||!stack.isEmpty()){
            while (root != null){
                arrayList.add(root.val);
                stack.push(root);
                root = root.left;
            }
            root  = stack.pop().right;
        }
        return arrayList;
    }

 

posted @ 2019-08-20 20:00  WuCola  阅读(73)  评论(0)    收藏  举报