Loading

144. [二叉树]二叉树的前序遍历

144. 二叉树的前序遍历

方法一:递归

递归方法采用 DFS 深度优先搜索策略,在模拟时隐式地维护了一个栈,用来存放遍历过的 node。我们也可以用迭代法,显式地维护一个栈。

// 执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户 
// 内存消耗: 36.9 MB , 在所有 Java 提交中击败了 80.60% 的用户

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

    // 利用 peroderViste,加 list 条件
    private void preorderViste(TreeNode root, List<Integer> list) {
        if (root == null) {
			return ;
        }
        list.add(root.val);
        preorderViste(root.left, list);
        preorderViste(root.right, list);
    }
}

方法二:迭代

// 执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户 
// 内存消耗: 36.9 MB , 在所有 Java 提交中击败了 79.40% 的用户

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
    	if (root == null){
           return new ArrayList<>(); 
        }
        
       	LinkedList<Integer> ans = new LinkedList<>();
        LinkedList<TreeNode> stack = new LinkedList<>();
        
        stack.offer(root);
        while(!stack.isEmpty()){
            TreeNode node = stack.pollLast();
            ans.offer(node.val);
            if (node.right != null){
                stack.offer(node.right);
            }
            if (node.left != null){
                stack.offer(node.left);
            }
        }
        return ans;
    }
}
posted @ 2020-10-23 12:27  上海井盖王  阅读(145)  评论(0)    收藏  举报