博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的层次遍历 II
阅读量:6984 次
发布时间:2019-06-27

本文共 2046 字,大约阅读时间需要 6 分钟。

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

样例

给出一棵二叉树 {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
> levelOrderBottom(TreeNode root) { // write your code here if(root == null){ return new ArrayList
>(); } List
> ans = work(levelOrderBottom(root.left),levelOrderBottom(root.right));//递归 List
rootval = new ArrayList
(); rootval.add(root.val); ans.add(rootval); return ans; } public List
> work(List
> left,List
>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
> ans = new ArrayList
>(); for(int i =0 ;i
()); } while(count<=len){ List
lv = left.size() == 0?new ArrayList
():left.remove(left.size()-1); List
rv = right.size() == 0?new ArrayList
():right.remove(right.size()-1); ans.remove(len-count); ans.add(len-count,miniwork(lv,rv)); count++; } return ans; } public List
miniwork(List
left,List
right){//作用合并两个一维数组,右边的拼到左边 if(left.size() == 0){ return right; } if(right.size() == 0){ return left; } int len = right.size(); int count = 0; while(count

 

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

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

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

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

你可能感兴趣的文章
RequestQueue
查看>>
Android TextView 属性设置
查看>>
html元素分类以及嵌套规则
查看>>
android dpi
查看>>
C语言的预处理、编译、汇编、链接
查看>>
nginx的启动、停止、平滑重启
查看>>
(转)ASIHTTPRequest 详解, http 请求终结者
查看>>
编辑器实时保存内容
查看>>
COMPUTER HARDWARE OPENCART 主题模板 ABC-0059
查看>>
android listview item点击时更改textview的颜色 代码中实现
查看>>
How to install Docker on Ubuntu
查看>>
EXTjs
查看>>
开启win7 FTP 服务 无法登陆的原因
查看>>
SSO之CAS单点登录详细搭建
查看>>
开发自定义JSF组件(4) 保存状态与恢复状态
查看>>
ZBarSDK扫描二维码
查看>>
Windows的Win键被自动按下解决方案
查看>>
lucene4.7 分页(五)
查看>>
MyEclipse_15字体设置
查看>>
PHP中处理函数的函数(Function Handling Functions)
查看>>