给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)

样例

给出一棵二叉树 {3,9,20,#,#,15,7},

    3/ \9  20/  \15   7

按照从下往上的层次遍历为:

[[15,7],[9,20],[3]
]
/*** Definition of TreeNode:* public class TreeNode {*     public int val;*     public TreeNode left, right;*     public TreeNode(int val) {*         this.val = val;*         this.left = this.right = null;*     }* }*/public class Solution {/** @param root: A tree* @return: buttom-up level order a list of lists of integer*/public List<List<Integer>> levelOrderBottom(TreeNode root) {// write your code hereif(root == null){return new ArrayList<List<Integer>>();}List<List<Integer>> ans = work(levelOrderBottom(root.left),levelOrderBottom(root.right));//递归List<Integer> rootval = new ArrayList<Integer>();rootval.add(root.val);ans.add(rootval);return ans;}public List<List<Integer>> work(List<List<Integer>> left,List<List<Integer>>right){//将两个二维数组 从数组下面开始往上合并((1),(2,3)) ((6))结果是((1),(2,3,6))if(left.size() == 0){return right;}if(right.size() == 0){return left;}int len = Math.max(right.size(),left.size());int count = 1;List<List<Integer>> ans = new ArrayList<List<Integer>>();for(int i =0 ;i<len;i++){//java中array list 只可以add长度比size()大一或者以内的,如果add一个新的 老的会被后挤。所以有了6行后的remove,要是有更好的方法,欢迎赐教(本人java小白一个)ans.add(i,new ArrayList<Integer>());}while(count<=len){List<Integer> lv = left.size() == 0?new ArrayList<Integer>():left.remove(left.size()-1);List<Integer> rv = right.size() == 0?new ArrayList<Integer>():right.remove(right.size()-1);ans.remove(len-count);ans.add(len-count,miniwork(lv,rv));count++;}return ans;}public List<Integer> miniwork(List<Integer> left,List<Integer> right){//作用合并两个一维数组,右边的拼到左边if(left.size() == 0){return right;}if(right.size() == 0){return left;}int len = right.size();int count = 0;while(count<len){left.add(right.get(count));count++;}return left;}
}

这个题网上的方法,就是正常的二叉树按层遍历然后 直接数组反转,或者入栈反转

如果这么做的话 和二叉树的层次正序遍历  就没区别了。出于这个想法  ,考虑出这种做法,可能略烦琐

递归的思想 左子树和右子树 都返回一个已经排序的二维数组。 我在当前节点把两个子数的返回数据拼在一起(这里要注意,因为子树的深度不一致,那么只能先拼数组后面的 ,对应的节点就是靠上的节点),然后把当前节点add进去。 在拼的时候因为是要先add后面的,导致了数组越界,ArrayList的特点是 长度等于5了,才能add 6的。这就有了41,42,43,47这几步奇葩的操作,因为java刚入门,所以应该有更好的解决方案。

转载于:https://www.cnblogs.com/tobemaster/p/7796647.html

二叉树的层次遍历 II相关推荐

  1. 【每日一算法】二叉树的层次遍历 II

    每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...

  2. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  3. 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II

    题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...

  4. 107. 二叉树的层次遍历 II

    给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ ...

  5. leetcode107. 二叉树的层次遍历 II

    给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \1 ...

  6. leetcode 二叉树的层次遍历 II(Binary Tree Level Order Traversal II)

    目录 题目描述: 示例: 解法: 题目描述: 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例: 给定二叉树 [3,9,20,null ...

  7. LeetCode 107. 二叉树的层次遍历 II(队列)

    1. 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7],3/ \9 ...

  8. LeetCode(107)——二叉树的层次遍历 II(JavaScript)

    给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 返回其自底向上的层次 ...

  9. 二叉树的层次遍历II

    题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 返回其自底向上 ...

最新文章

  1. memset初始化内存
  2. JavaScriptjQuery.事件流
  3. 深入理解ROS技术 【1】ROS下的模块详解(1-65)
  4. php 面向对象 示例,php中面向对象示例
  5. linux lvm 调整分区大小,linux调整lvm分区大小(/home分区过大,/root分区过小)
  6. 浏览器渲染机制面试_面试官不讲码德,问我Chrome浏览器的渲染原理(6000字长文)...
  7. Echarts作图之柏拉图
  8. SpringData_JpaRepository接口
  9. AWS S3 Windows系统下的文件夹上传基于python
  10. html表单提交不判断,请问jquery有方法可以判断一个表单提交之后结果是成功或不成功吗?...
  11. 大话深度学习:B站Up主麦叔教你零代码实现图像分类神经网络
  12. CentOS 6.5下安装MySQL后重置root密码方法
  13. java sdk怎么配置_Java SDK环境配置教程
  14. intel c语言面试题,Intel的一道C语言笔试题
  15. CSP 201903-2 二十四点 python (python有如神助)
  16. 如何购买银行理财子公司的理财产品?
  17. phpmywind最新版sql注入以及后台目录遍历和文件读取
  18. 图新地球(LSV)常见问题汇总(图源、全景、倾斜摄影、点云应用、图新地球模糊等等)------持续更新
  19. 关于linux fc多路径巡检
  20. 联想台式电脑一键恢复后桌面没有计算机了,联想笔记本一键恢复功能使用教程...

热门文章

  1. JSON.parse解析特殊字符报错解决方案
  2. python常用数据结构的常用操作
  3. Android app 别用中文名
  4. Educational Codeforces Round 9 F. Magic Matrix 最小生成树
  5. 【转】让Chrome化身成为摸鱼神器,利用Chorme运行布卡漫画以及其他安卓APK应用教程...
  6. 【转】Android下编译jni库的二种方法(含示例) -- 不错
  7. 怎么让百度快速重新收录
  8. Tensorflow源码解析5 -- 图的边 - Tensor
  9. Unity接入安卓sdk查看应用内存占用
  10. RabbitMQ入门(4)--路由