算法题:二叉树打印
来源:互联网 发布:python 编码转换 编辑:程序博客网 时间:2024/06/05 09:44
1.题目
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class TreePrinter { public int[][] printTree(TreeNode root) { //write code here }}
2.思路
借用一个队列,以层次遍历的思想,来解答。关键点在于,判断什么时候该换层了。
- 用
last
指向当前正在打印的行的最右边的节点。 - 用
nLast
指向当前入队的节点。 - 从根结点开始,将其左右孩子以层次遍历的方式入队。每入队一个元素,即让
nLast
指向这个元素,将队首元素temp
出队到一个ArrayList
中,当temp==last
时,代表该换行了,也就是将当前ArrayList
放到一个ArrayLists
中,再讲当前的ArrayList
清空。然后last=nLast;
3.代码
public int[][] printTree(TreeNode root) { if(root==null) return null; int[][]result=null; TreeNode last=root; TreeNode nLast=null; TreeNode temp=null; ArrayList<Integer>array=new ArrayList<>(); ArrayList<ArrayList<Integer>> arrays=new ArrayList<>(); LinkedList<TreeNode>queue=new LinkedList<>(); queue.add(last); while(!queue.isEmpty()){ temp=queue.poll(); array.add(temp.val); if(temp.left!=null){ queue.add(temp.left); nLast=temp.left; } if(temp.right!=null){ queue.add(temp.right); nLast=temp.right; } if(temp==last){ arrays.add(array); array=new ArrayList<>(); last=nLast; } } result=new int[arrays.size()][]; for(int i=0;i<arrays.size();i++){ result[i]=new int[arrays.get(i).size()]; for(int j=0;j<arrays.get(i).size();j++){ result[i][j]=arrays.get(i).get(j); } } return result; }
需要注意ArrayList<ArrayList<Integer>>
转换成int[][]
的方法。
0 0
- 算法题:二叉树打印
- 【算法题】之字打印二叉树
- 牛客网 算法第一题 二叉树按层次打印问题
- 一天一算法:day01二叉树打印
- 算法导论 之 平衡二叉树 - 打印 - 递归[C语言]
- 编程算法 - 数组构造二叉树并打印
- 从上往下打印二叉树(算法)
- 设计一个算法,按照层次打印这棵二叉树。
- 面试算法:利用链表层级打印二叉树节点
- 一天一算法:day01二叉树打印练习
- 笔试面试算法经典--二叉树层次打印
- 算法实现-二叉树的按层打印
- 算法面试题:逆时针打印二叉树外围边缘
- 算法题目---从上往下打印二叉树
- 算法复习:从上往下打印二叉树
- 按照层次打印二叉树算法C++实现
- 【二叉树】二叉树打印
- 从上到下打印二叉树-剑指offer23题
- 文章标题
- Apache Ignite 入门(3) 分布式缓存基础
- 互联网协议
- 数字逻辑电路(1)--逻辑代数基础
- JS DOM之getElementsByClassName
- 算法题:二叉树打印
- 安卓学习(SQlite的基本使用)
- 各种报文
- Fragment详解之二——基本使用方法
- LinuxShell算术运算
- 安装sql步骤及详细说明
- 类库和框架的区别
- jackson @JsonProperty 用法
- Hashtable源码学习