笔试面试算法经典--二叉树层次打印
来源:互联网 发布:全时会议软件 编辑:程序博客网 时间:2024/06/18 15:18
【题目描述】
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
例如下面的树输出为:
12
5 18
2 9 15 19
17
16
解法:
用队列来保存每层的节点,使用层次遍历,记录每层节点的个数,每层节点的个数其实是当前队列中没有加入任何子节点是队列的大小,然后将一行全部输出的同时将其子节点加入到队列。如上面图中,先将12 放入到队列中,此时队列的长度为1,然后将12 输出,8 18进入到队列中此时队列的长度刚好为2。因此可知队列的长度正好对应每行节点的个数。
/*class TreeNode{ int val; TreeNode left=null; TreeNode right=null; public TreeNode(int val) { this.val = val; }}*///本算法没有打印每行节点而是将每行节点保存在不同的list中。public static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > listAll=new ArrayList<ArrayList<Integer>>(); if(pRoot==null) return listAll; TreeNode cur; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(pRoot); //将根节点入队。 while(!queue.isEmpty()) { int i=0; int len=queue.size(); //用len记录当前队列的长度,也就是当前行的节点个数。 ArrayList<Integer> list=new ArrayList<Integer>(); while(i<len) { //将当前行中的节点输出的同时,将其子节点进入队列中 cur=queue.poll(); if(cur.left!=null) queue.add(cur.left); if(cur.right!=null) queue.add(cur.right); i++; list.add(cur.val); } listAll.add(list); } return listAll; }
0 0
- 笔试面试算法经典--二叉树层次打印
- 面试经典二叉树算法
- 笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)
- 层次打印二叉树
- 层次打印二叉树
- 层次打印二叉树
- 面试经典(11)--二叉树层次遍历
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 笔试面试算法经典--二叉树的子结构(Java)
- 笔试面试算法经典--二叉搜索树转有序的双向链表(Java)
- 二叉树笔试面试常见算法题
- 牛客网 算法第一题 二叉树按层次打印问题
- 设计一个算法,按照层次打印这棵二叉树。
- 按照层次打印二叉树算法C++实现
- 层次结构打印二叉树
- 按层次打印二叉树
- 二叉树层次遍历打印
- Python二叉树层次打印
- 不正经运维狗的文档12
- jsp实现仿QQ空间新建多个相册名称,向相册中添加照片
- Android Dialog简单使用
- final注意事项
- nginx配置pass_proxy导致ERR_NAME_NOT_RESOLVED和403 Forbidden
- 笔试面试算法经典--二叉树层次打印
- PAT-A-1028. List Sorting (25)
- LeetCode 92. Reverse Linked List II
- MySQL基础知识点(在网上总结的资料)
- 在linux上部署web项目并运行(单机测试版)
- Class.getResource和ClassLoader.getResource的区别分析及用法
- A'A和AA'拥有相同的非零特征值的证明
- 两幅图片逐个像素对比筛选不同的区域
- linux运维-网络管理