zoukankan      html  css  js  c++  java
  • leetcode 145. 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历。

    示例:

    输入: [1,null,2,3]
    1

    2
    /
    3

    输出: [3,2,1]

     1 //递归算法
     2 class Solution {
     3     public List<Integer> postorderTraversal(TreeNode root) {
     4         List<Integer> list = new ArrayList<Integer>();
     5         if(root==null) return list;
     6         postorder(root,list);
     7         return list;
     8     }
     9     public List<Integer> postorder(TreeNode node,List<Integer> list){
    10         if(node.left!=null)postorder(node.left,list);
    11         if(node.right!=null)postorder(node.right,list);
    12         list.add(node.val);
    13         return list;
    14     }
    15 }
    16 //迭代算法
    17 class Solution {
    18     public List<Integer> postorderTraversal(TreeNode root) {
    19         List<Integer> list = new ArrayList<Integer>();
    20         if(root==null)return list;
    21         Stack<TreeNode> stack = new Stack<TreeNode>();
    22         Stack<TreeNode> stackresult = new Stack<TreeNode>();
    23         stack.push(root);
    24         while(!stack.empty()){
    25             TreeNode tmpnode = stack.pop();
    26             stackresult.push(tmpnode);
    27             if(tmpnode.left!=null)stack.push(tmpnode.left);
    28             if(tmpnode.right!=null)stack.push(tmpnode.right);
    29         }
    30         while(!stackresult.empty()){
    31             TreeNode tmpnode = stackresult.pop();
    32             list.add(tmpnode.val);
    33         }
    34         return list;
    35     }
    36 }

    直观想法:前序遍历的结果反转过来的结果是否就是后序遍历?再进一步分析在前序遍历的基础上改变下压栈的顺序即可。

  • 相关阅读:
    10.19
    10.17
    张钊的作业
    张钊的第十一份作业
    张钊的第十份作业
    张昭的第九次作业
    张钊的第八份作业
    张钊的第七份作业
    张钊的第六次作业啊
    张钊O的第五次作业
  • 原文地址:https://www.cnblogs.com/gongzixiaobaibcy/p/11985715.html
Copyright © 2011-2022 走看看