一、题目

  请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
二、思路

  详见代码

三、代码

  1. import java.util.ArrayList;
  2. import java.util.Stack;
  3.  
  4. public class Solution {
  5. public ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
  6. int layer = 1;
  7. //s1存奇数层节点
  8. Stack<TreeNode> s1 = new Stack<>();
  9. s1.push(pRoot);
  10. //s2存偶数层节点
  11. Stack<TreeNode> s2 = new Stack<>();
  12.  
  13. //返回结果
  14. ArrayList<ArrayList<Integer>> list = new ArrayList<>();
  15.  
  16. while (!s1.empty() || !s2.empty()) {
  17. if (layer % 2 != 0) {
  18. ArrayList<Integer> temp = new ArrayList<>();
  19. while (!s1.empty()) {
  20. TreeNode node = s1.pop();
  21. if (node != null) {
  22. temp.add(node.val);
  23. System.out.print(node.val + " ");
  24. s2.push(node.left);
  25. s2.push(node.right);
  26. }
  27. }
  28. if (!temp.isEmpty()) {
  29. list.add(temp);
  30. layer++;
  31. System.out.println();
  32. }
  33. } else {
  34. ArrayList<Integer> temp = new ArrayList<>();
  35. while (!s2.empty()) {
  36. TreeNode node = s2.pop();
  37. if (node != null) {
  38. temp.add(node.val);
  39. System.out.print(node.val + " ");
  40. s1.push(node.right);
  41. s1.push(node.left);
  42. }
  43. }
  44. if (!temp.isEmpty()) {
  45. list.add(temp);
  46. layer++;
  47. System.out.println();
  48. }
  49. }
  50. }
  51. return list;
  52. }
  53. }

相关测试函数

  1. public class TreeNode {
  2. int val = 0;
  3. TreeNode left = null;
  4. TreeNode right = null;
  5.  
  6. public TreeNode(int val) {
  7. this.val = val;
  8. }
  9.  
  10. public TreeNode(int val, TreeNode left, TreeNode right) {
  11. this.val = val;
  12. this.left = left;
  13. this.right = right;
  14. }
  15. }
  1. import java.util.ArrayList;
  2.  
  3. public class TestMain {
  4. public static void main(String[] args) {
  5. //注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
  6. TreeNode G = new TreeNode(1, null, null);
  7. TreeNode F = new TreeNode(2, null, null);
  8. TreeNode E = new TreeNode(3, null, null);
  9. TreeNode D = new TreeNode(4, null, null);
  10. TreeNode C = new TreeNode(5, F, G);
  11. TreeNode B = new TreeNode(6, D, E);
  12. TreeNode A = new TreeNode(8, B, C);
  13.  
  14. ArrayList<ArrayList<Integer>> arrayList=new ArrayList<>();
  15.  
  16. Solution s=new Solution();
  17. arrayList= s.print(A);
  18.  
  19. //之字形遍历输出
  20. for(int i=0;i<arrayList.size();i++){
  21. for (int j=0;j<arrayList.get(i).size();j++){
  22. System.out.print(arrayList.get(i).get(j)+",");
  23. }
  24. System.out.println();
  25. }
  26.  
  27. }
  28. }

---------------------------------------------

参考链接:

https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0

剑指offer五十九之按之字形顺序打印二叉树的更多相关文章

  1. 剑指offer二十二之从上往下打印二叉树

    一.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 二.思路 二叉树的层次遍历,可以借助队列实现.具体思路详见注释. 三.代码 import java.util.ArrayList; i ...

  2. 剑指Offer(十九):顺时针打印矩阵

    剑指Offer(十九):顺时针打印矩阵 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...

  3. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  4. 剑指offer五十二之正则表达式匹配

    一.题目 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...

  5. 剑指Offer(十九)——顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵: 1   2    3     4 5   6    7     8 9   10  11  ...

  6. 剑指offer五十八之对称的二叉树

    一.题目 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.二.思路 递归做,详见代码 三.代码 /* public class TreeN ...

  7. 剑指offer五十六之删除链表中重复的结点

    一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  8. 剑指offer五十五之链表中环的入口结点

    一.题目 一个链表中包含环,请找出该链表的环的入口结点. 二.思路 方法一: 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程). ...

  9. 剑指offer五十四之字符流中第一个不重复的字符

    一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

随机推荐

  1. linxu ssh 双端认证 不成功之authorized_keys

    linxu ssh 双端认证 不成功之authorized_keys liunx双端认证可以让我们更简便的在两台服务器之间传输文件,配置暂且不说,网上有大部分的文章可以搜索到,今天我要说的是在不成功的 ...

  2. LA 4670 Dominating Patterns (AC自动机)

    题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如 ...

  3. momery

    reg [7:0] moma [255:0] ;//定义一个位宽为8,浓度为什么256的memory. parameter wordsize = 8; parameter memsize = 256; ...

  4. swagger core 和 swagger ui 如何关联【窥探】

    几个片段: package io.swagger.jaxrs.listing; import io.swagger.annotations.ApiOperation; import org.apach ...

  5. SecureCRT和乱码

    示例: # ls /usr/local/r3c/bin/lib /bin/ls: /usr/local/r3c/bin/lib: ????????? 查看系统字符集设置: # locale LANG= ...

  6. QGIS Server Quickstart

    http://live.osgeo.org/en/quickstart/qgis_mapserver_quickstart.html

  7. How to create a Multi-device Site - some details

    https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/index?hl ...

  8. Trystrtofloat

    TryStrToFloat为 ‘+1’和‘-1’和 ‘.1’是可以装换成功的

  9. Linux测试上行和下载速率

    下载安装speedtest-cli测试工具 方法一: pip3 install speedtest-cli 方法二: wget https://github.com/sivel/speedtest-c ...

  10. ArcGIS下图层范围不正确的两种处理方式

    ArcGIS下图层范围不正确,偶尔能碰上这种情况,主要表现为“缩放至图层”时,其显示范围与该图层内所有要素的外包围盒范围不一致.针对这个问题,有两种解决办法. 方法一:导出数据.新创建含有要素的Sha ...