二叉树按层遍历
来源:互联网 发布:淘宝联盟结算时间 编辑:程序博客网 时间:2024/06/05 09:54
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行
方法一:一个队列实现
先将根节点入队列,需要一个变量记录当前层的结点个数 end=queue.size(),第一次循环end=1;
根节点出队列,根节点有左孩子,左孩子入队列,有右孩子右孩子入队列,完成后队列中有2个节点(假设左右孩子都在),记录当前层的结点个数 end=queue.size(),这两个结点依次出队列,并将其左右孩子入队列,依次循环。
public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > listLevel=new ArrayList<ArrayList<Integer> >(); Queue<TreeNode> queue=new LinkedList<TreeNode>(); if(pRoot==null) return listLevel; queue.offer(pRoot); while(!queue.isEmpty()){ ArrayList<Integer> arrayList=new ArrayList<Integer>(); int lo=0,end=queue.size(); while(lo++<end){ TreeNode node=queue.poll(); arrayList.add(node.val); if(node.left!=null) queue.offer(node.left); if(node.right!=null) queue.offer(node.right); } if(arrayList.size()>0) listLevel.add(arrayList); } return listLevel; } }
方法二:两个队列实现
1根结点入queue1
2根节点出queue1,根节点左右孩子入queue2,第一次循环后queue1为空
3queue2中的结点依次出队列,左右孩子入queue1,第二次循环完后queue2为空
4依次交替循环
public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > listLevel=new ArrayList<ArrayList<Integer> >(); Queue<TreeNode> queue1=new LinkedList<TreeNode>(); Queue<TreeNode> queue2=new LinkedList<TreeNode>(); if(pRoot==null) return listLevel; queue1.offer(pRoot); while((!queue1.isEmpty())||(!queue2.isEmpty())){ ArrayList<Integer> arrayList=new ArrayList<Integer>(); while(!queue1.isEmpty()){ TreeNode treeNode = queue1.poll(); arrayList.add(treeNode.val); if(treeNode.left!=null) queue2.offer(treeNode.left); if(treeNode.right!=null) queue2.offer(treeNode.right); } if(arrayList.size()>0) listLevel.add(arrayList); arrayList=new ArrayList<Integer>(); //交换两个队列 // listLevel.add(arrayList); // swap(queue1,queue2); while(!queue2.isEmpty()){ TreeNode treeNode = queue2.poll(); arrayList.add(treeNode.val); if(treeNode.left!=null) queue1.offer(treeNode.left); if(treeNode.right!=null) queue1.offer(treeNode.right); } if(arrayList.size()>0) listLevel.add(arrayList); } return listLevel; }
阅读全文
0 0
- 二叉树按层遍历
- 二叉树按层遍历
- 二叉树按层遍历问题
- 二叉树按层遍历
- 二叉树按层遍历
- 二叉树按层遍历
- 二叉树3:二叉树按层遍历打印
- 数据结构之二叉树按层遍历
- 二叉树按层遍历打印换行
- 二叉树按层遍历(每层一行)
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 二叉树遍历
- 二叉树逐层遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 算法中常见的数组问题
- 学习 Kotlin 的 20 个实用资源
- 用jquery动态生成的元素绑定事件
- [bzoj4152][AMPPZ2014]The Captain dijkstra
- 理解shallow heap 和 retained heap
- 二叉树按层遍历
- java之回调函数
- PAT (Advanced Level) Practise 1087 All Roads Lead to Rome (30)
- 设计模式的学习--(3)工厂方法模式
- ggg
- linux tr命令详解
- 数组转list的两个方法
- 语音识别 声纹识别 音频搜索 视频搜索 广电监控 媒资管理 中文视频搜索
- 用JS制作一个倒计时的按钮