• 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 }

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

  • 相关阅读:
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    福大软工1816
    福大软工1816 · 第三次作业
    alpha冲刺总结随笔
    alpha-咸鱼冲刺day8
    alpha-咸鱼冲刺day9
    alpha-咸鱼冲刺day7
    alpha-咸鱼冲刺day5
  • 原文地址:https://www.cnblogs.com/gongzixiaobaibcy/p/11985715.html
Copyright © 2020-2023  润新知