zoukankan      html  css  js  c++  java
  • [Leetcode] 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?

    Solution 1: 非递归

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<Integer> postorderTraversal(TreeNode root) {
    12         List<Integer> result = new ArrayList<Integer>();
    13         if (root == null)
    14             return result;
    15         Stack<TreeNode> s = new Stack<TreeNode>();
    16         TreeNode node = root, prev = root;
    17         while (node != null || !s.isEmpty()) {
    18             while (node != null) {
    19                 s.add(node);
    20                 node = node.left;
    21             }
    22             if (s.size() > 0) {
    23                 TreeNode temp = s.peek().right;
    24                 if(temp!=null&&temp!=prev){
    25                     node=temp;
    26                 }else if(temp==prev||temp==null){
    27                     node=s.pop();
    28                     result.add(node.val);
    29                     prev=node;
    30                     node=null;
    31                 }
    32             }
    33         }
    34         return result;
    35     }
    36 }

     

    Solution 2: 递归

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<Integer> postorderTraversal(TreeNode root) {
    12         List<Integer> result=new ArrayList<Integer>();
    13         myPostorderTraversal(root,result);
    14         return result;
    15     }
    16 
    17     private void myPostorderTraversal(TreeNode root, List<Integer> result) {
    18         // TODO Auto-generated method stub
    19         if(root!=null){
    20             myPostorderTraversal(root.left, result);
    21             myPostorderTraversal(root.right, result);
    22             result.add(root.val);
    23         }
    24     }
    25 }
  • 相关阅读:
    假期总结三
    假期总结三
    假期总结三
    假期总结三
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    进程
    C# exe文件 添加到windows 服务
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/4042933.html
Copyright © 2011-2022 走看看