zoukankan      html  css  js  c++  java
  • 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal 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?

    M1: recursive

    time: O(n), space: O(height)

    /**
     * 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) {
            List<Integer> res = new ArrayList<>();
            preorder(root, res);
            return res;
        }
        
        public void preorder(TreeNode root, List<Integer> res) {
            if(root == null) {
                return;
            }
            res.add(root.val);
            preorder(root.left, res);
            preorder(root.right, res);
        }
    }

    M2: iterative

    time: O(n), space: O(n)  -- depending on the tree structure, could keep up to the entire tree

    /**
     * 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) {
            List<Integer> res = new ArrayList<>();
            LinkedList<TreeNode> s = new LinkedList<>();
            if(root == null) {
                return res;
            }
            
            s.offerFirst(root);
            while(!s.isEmpty()) {
                TreeNode cur = s.pollFirst();
                res.add(cur.val);
                if(cur.right != null) {
                    s.offerFirst(cur.right);
                }
                if(cur.left != null) {
                    s.offerFirst(cur.left);
                }
            }
            return res;
        }
    }
  • 相关阅读:
    jquery之滚楼
    jquery之仿京东菜单
    jquery之鼠标移动[沸腾京东]
    jquery之飘雪
    jquery之手风琴
    jquery 开始与结束方法 loading窗
    JS对象与数组
    Selenium+Python浏览器调用:Firefox
    Python脚本检查网页是否可以打开
    ubuntu安装pycharm教程
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10232935.html
Copyright © 2011-2022 走看看