牛客网刷题之按之字形顺序打印二叉树
来源:互联网 发布:java schedule 编辑:程序博客网 时间:2024/06/01 21:00
题目描述:
解题思路:
这基本是层遍历的思路。但不同的是:由于需要按照之字形打印每一层,所以在打印每一行之前需要判断上一行打印的顺序。如果上一行打印的顺序使从左到右,那么下一行的打印顺序应该是从右到左。实现的这点可以采用奇数行从左到右打印,偶数行从右到左进行打印。还可直接设置 一个布尔变量,每打印一行就改变一次该变量的值。其他的就是层序遍历的思路了。
题解:
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > res = new ArrayList<>(); if(pRoot == null){ return res; } Queue<TreeNode> queue = new LinkedList<>();//存储遍历顺序 queue.add(pRoot); ArrayList<Integer> list = new ArrayList<>();//存储每一行遍历结果 boolean isLeftToRight = true; int begin = 0; int end = 1; while(! queue.isEmpty()){ TreeNode curNode = queue.poll(); list.add(curNode.val); begin ++; if(curNode.left != null){ queue.add(curNode.left); } if(curNode.right != null){ queue.add(curNode.right); } if(begin == end){ if(! isLeftToRight){ res.add(reverse(list)); }else{ res.add(list); } isLeftToRight = !isLeftToRight;//下一行改变方向 end = queue.size(); begin = 0; list = new ArrayList<>();//保存下一行遍历的元素 } } return res; } private ArrayList<Integer> reverse(ArrayList<Integer> res) { ArrayList<Integer> reverseList = new ArrayList<>(); for(int i = res.size()-1 ; i >= 0 ; i --){ reverseList.add(res.get(i)); } return reverseList; }
ac结果:
0 0
- 牛客网刷题之按之字形顺序打印二叉树
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 牛客网 | 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 55.按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 【59】按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- Q61:按之字形顺序打印二叉树
- Unable to access Android SDK add-on list提示
- 欢迎使用CSDN-markdown编辑器
- 实用的60个CSS代码片段
- 1021. 个位数统计 (15)
- 算法的时间复杂度分析
- 牛客网刷题之按之字形顺序打印二叉树
- 帧率控制
- 快速枚举
- PARTITION BY "分区",其实就是统计的范围条件
- 发回重审
- FFmpeg新旧接口对照使用笔记
- 如何用Beyond Compare缩略图
- Martin Luther King, Jr.: "I Have a Dream"
- uap用友nc65自动加行号