当前位置: 首页 > news >正文

[LeetCode]: 145: 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?

 

思路1:递归解决

 

代码:

    public ArrayList<Integer> postorderTraversal(TreeNode root) {
        ArrayList<Integer> arrResult = new ArrayList<Integer>();
        return AddNode(root,arrResult);
    }
    
    public ArrayList<Integer> AddNode(TreeNode root,ArrayList<Integer> arrTotal) {
        if(root == null){
            return arrTotal;
        }

        AddNode(root.left , arrTotal);
        AddNode(root.right , arrTotal);
        arrTotal.add(root.val);
        return arrTotal;
    }

 

思路2:广度优先搜索的变形,采用栈来记录节点

其中关键的一个点就是:当某一个节点的左子树或右子树不为空的时候,

     - 需要将左子树或者右子树也加到这个栈里面

     - 同时还要将原节点对应的左右子树置成null,这样再次遍历栈时,再回到那个节点才不会引起无限循环

    public ArrayList<Integer> postorderTraversal(TreeNode root) {

        ArrayList<Integer> arrResult = new ArrayList<Integer>();
        Stack<TreeNode> staTemp = new Stack<TreeNode>();
        Stack<TreeNode> staResult= new Stack<TreeNode>();
        
        if(root == null){
            return arrResult;
        }

        staTemp.push(root);
        while(!staTemp.empty()){
            TreeNode nodeTemp = staTemp.peek();
            
            if(nodeTemp.left == null && nodeTemp.right == null){
                arrResult.add(nodeTemp.val);
                staTemp.pop();
            }
            else{
                if(nodeTemp.right != null){
                    staTemp.push(nodeTemp.right);
                    nodeTemp.right = null;
                }
                
                if(nodeTemp.left != null){
                    staTemp.push(nodeTemp.left);
                    nodeTemp.left = null;
                }
            }
            
        }
        
        
        return arrResult;
    }

 

转载于:https://www.cnblogs.com/savageclc26/p/4864626.html

相关文章:

  • 25个你会喜欢的创新的水平滚动网站设计欣赏
  • C++ unordered_map remove 实现哈希表移除
  • HTML+CSS+div学习——第一课
  • php上传$_FILES 无法取值
  • ios学习随记
  • Otto开发初探——微服务依赖管理新利器
  • 一些常用的Unix命令
  • 【转】验证码类
  • Lync Server 2010标准版前端服务器迁移之二:迁移用户及中央管理存储
  • 何谓集群
  • mysql 使用小结
  • 基于Qt有限状态机的一种实现方式和完善的人工智能方法
  • 【Android】高德地图 缩放级别及像素以及地图上的点转化成屏幕上的点
  • JAVA基础学习day26--正则表达式
  • css3中的伪元素
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【RocksDB】TransactionDB源码分析
  • github从入门到放弃(1)
  • Git学习与使用心得(1)—— 初始化
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JDK 6和JDK 7中的substring()方法
  • js中的正则表达式入门
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • redis学习笔记(三):列表、集合、有序集合
  • SpringBoot几种定时任务的实现方式
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • VuePress 静态网站生成
  • vue自定义指令实现v-tap插件
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 不上全站https的网站你们就等着被恶心死吧
  • 浮动相关
  • 给新手的新浪微博 SDK 集成教程【一】
  • 工作手记之html2canvas使用概述
  • 基于Android乐音识别(2)
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 说说动画卡顿的解决方案
  • 微信小程序--------语音识别(前端自己也能玩)
  • 鱼骨图 - 如何绘制?
  • k8s使用glusterfs实现动态持久化存储
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ( 10 )MySQL中的外键
  • (2)nginx 安装、启停
  • (Python) SOAP Web Service (HTTP POST)
  • (rabbitmq的高级特性)消息可靠性
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (分布式缓存)Redis哨兵
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (四)linux文件内容查看
  • (转)3D模板阴影原理
  • (转)Mysql的优化设置
  • (转载)OpenStack Hacker养成指南
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树