• Binary Tree Postorder Traversal


    Binary Tree Postorder Traversal 

    问题:

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

    思路:

      栈方法

    我的代码:

    public class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            List<Integer> rst = new ArrayList<Integer>();
            if(root == null) return rst;
            Stack<TreeNode> stack = new Stack<TreeNode>();
            stack.push(root);
            while(!stack.isEmpty())
            {
                TreeNode node = stack.pop();
                rst.add(0,node.val);
                if(node.left != null)
                    stack.push(node.left);
                if(node.right != null)
                    stack.push(node.right);
            }
            return rst;
        }
    }
    View Code

    学习之处:

    • 递归的前序,中序,后序是很好写的,关键在于非递归应该怎么写,无论怎么写都需要使用栈,因为递归==栈
    • 前序 root left right 所以压栈的方式是,弹出根节点,压入right 然后压入left 这样便能实现输出 root left right
    • 中序 一直压栈直到压完root的left 形成的结果是 left 弹栈,left 同时判断弹出的是否有right,若有,继续压left 栈里面的效果是 left
    • 后序遍历 弹出root,压入left,压入right 所以栈里面的效果是left right,经典之处在于每一次弹出节点都是插入到节点的前面 弹出root后的下一个节点弄得,插入到root的前面,就如同当前问题我的代码里描述的那样。
  • 相关阅读:
    JDK源码分析 – HashMap
    牛哄哄的celery
    redis数据库基础篇
    RPC的入门应用
    Python的常用模块
    消息队列之真知灼见
    面向对象编程(2)
    python3的C3算法
    面向对象编程(1)
    CRM项目之stark组件(2)
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4345358.html
Copyright © 2020-2023  润新知