树——从最下层向上打印二叉树(层序遍历扩展)
来源:互联网 发布:e25歼击车数据 编辑:程序博客网 时间:2024/05/16 10:58
题目:要求按深度从下到上访问二叉树,每层顺序从左到右。
例如:
Given binary tree{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3],]
方法:仍是从上向下层序遍历二叉树,用ArrayList保存每层结点信息,以null作为每层的分隔符,当遍历完二叉树后,反向遍历ArrayList。
代码如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */import java.util.*;public class Solution { public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) { ArrayList<ArrayList<Integer>> matrix=new ArrayList(); if(root == null) return matrix; ArrayList<TreeNode> list=new ArrayList(); saveLevelOrder(root,list);//层序遍历保存在list中; ArrayList<Integer> array=new ArrayList(); for(int index=list.size()-2;index>=0;index--)//跳过最后一个null; { if(list.get(index) == null) { matrix.add(array); array=new ArrayList(); }else { array.add(0,list.get(index).val); } } matrix.add(array);//最后的一个保存有root结点信息的array没有在while循环中保存,所以单独保存; return matrix; } public void saveLevelOrder(TreeNode root,ArrayList<TreeNode> list) { list.add(root); list.add(null);//第0层末尾的null; int cur=0;//cur表示当前结点在list中的index; while(cur<list.size()) { int next=list.size();//next表示下一层末尾结点的位置的后一个位置; while(cur<next) { TreeNode node=list.get(cur);//放在while循环外面导致cur不变化而出错; if(node!=null)//避免 NullPointerException; { if(node.left!=null) { list.add(node.left); } if(node.right!=null) { list.add(node.right); } } cur++; } if(cur == list.size())//不加这个判断会出现死循环情况,不断在list末尾加null; { break; } list.add(null);//用null作为每层的分隔符; } }}
0 0
- 树——从最下层向上打印二叉树(层序遍历扩展)
- 程序9——层序遍历二叉树(从上往下打印二叉树)
- 剑指Offer------从上往下打印二叉树(层序遍历)
- 从底向上层次遍历二叉树
- 树——按“之”字形打印二叉树(层序遍历变型)
- 剑指 offer:从上到下打印二叉树(层序遍历)
- (树的层序遍历)从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 从上到下打印二叉树——层序遍历二叉树
- Binary Tree Level Order Traversal II 从下向上按层遍历二叉树
- 从上到下打印二叉树(层序遍历,广度优先遍历二叉树)
- 剑指Offer-->从上向下打印二叉树(层序遍历 + 详解)
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 栈的压入、弹出序列 和从上往下打印二叉树(层序遍历)
- 剑指Offer23 : 从上而下打印二叉树--层序遍历
- 剑指offer:从上往下打印二叉树(层遍历二叉树)
- 层序遍历二叉树&打印其中一层
- 面试题23:从上往下打印二叉树(层序遍历) && 面试题25:二叉树中和为某一值的路径
- 二叉树系列——层序遍历二叉树
- hdoj Machine 5670 (模拟)水
- 栈template
- 解决 PermGen space Tomcat内存设置
- src与href属性的区别
- MySQL添加外键失败ERROR 1452的解决
- 树——从最下层向上打印二叉树(层序遍历扩展)
- textarea根据内容自动增长
- Centos 7.2 JDK8 安装
- 使用UIScrollViewKeyboardDismissMode实现了Message app的行为
- 待解决问题,备忘
- BI解决方案分享:地产BI数据分析系统的建设
- sqlite3自增key设定(创建自增字段)
- 错误:Unsupported major.minor version 51.0(jdk版本错误)
- 消息队列