zoukankan      html  css  js  c++  java
  • LeetCode: Binary Tree Postorder Traversal 解题报告

    Binary Tree Postorder Traversal

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

    For example:
    Given binary tree {1,#,2,3},
       1
       
         2
        /
       3
    return [3,2,1].

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

    Show Tags
    Have you met this question in a real interview? Yes  No
    Discuss

    SOLUTION 1:

    递归解法

     1 public List<Integer> postorderTraversal1(TreeNode root) {
     2         List<Integer> ret = new ArrayList<Integer>();
     3         dfs(root, ret);
     4         return ret;
     5     }
     6     
     7     // Solution 1: rec
     8     public void dfs(TreeNode root, List<Integer> ret) {
     9         if (root == null) {
    10             return;
    11         }
    12         
    13         dfs(root.left, ret);
    14         dfs(root.right, ret);
    15         ret.add(root.val);
    16     }
    View Code

    SOLUTION 2:

    /**
         *  后序遍历迭代解法
         *  http://www.youtube.com/watch?v=hv-mJUs5mvU
         *  http://blog.csdn.net/tang_jin2015/article/details/8545457
         *  从左到右的后序 与从右到左的前序的逆序是一样的,所以就简单喽! 哈哈
         *  用另外一个栈进行翻转即可喽
         */

     1 // Solution 2: iterator
     2     public List<Integer> postorderTraversal(TreeNode root) {
     3         List<Integer> ret = new ArrayList<Integer>();
     4         if (root == null) {
     5             return ret;
     6         }
     7         
     8         Stack<TreeNode> s = new Stack<TreeNode>();
     9         Stack<Integer> out = new Stack<Integer>();
    10         
    11         s.push(root);
    12         
    13         while (!s.isEmpty()) {
    14             TreeNode cur = s.pop();
    15             out.push(cur.val);
    16             
    17             if (cur.left != null) {
    18                 s.push(cur.left);
    19             }
    20             
    21             if (cur.right != null) {
    22                 s.push(cur.right);
    23             }
    24         }
    25         
    26         while (!out.isEmpty()) {
    27             ret.add(out.pop());
    28         }
    29         
    30         return ret;
    31     }
    View Code

    GITHUB:

    https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/PostorderTraversal.java

  • 相关阅读:
    C# 关键字 default
    nopCommerce_3.00-Nop.Core.Caching
    汉字转拼音
    ASP.NET MVC性能调试工具-MvcMiniProfiler
    开源项目
    UVA 11374 Airport Express 最短路
    UVA 10319 Manhattan 2-sat
    UVA 1357 Cells
    UVA 610 Street Directions 双连通分量
    UVA 11504 Dominos 强连通分量
  • 原文地址:https://www.cnblogs.com/yuzhangcmu/p/4172783.html
Copyright © 2011-2022 走看看