剑指offer五十九之按之字形顺序打印二叉树
一、题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
二、思路
详见代码
三、代码
- import java.util.ArrayList;
- import java.util.Stack;
- public class Solution {
- public ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
- int layer = 1;
- //s1存奇数层节点
- Stack<TreeNode> s1 = new Stack<>();
- s1.push(pRoot);
- //s2存偶数层节点
- Stack<TreeNode> s2 = new Stack<>();
- //返回结果
- ArrayList<ArrayList<Integer>> list = new ArrayList<>();
- while (!s1.empty() || !s2.empty()) {
- if (layer % 2 != 0) {
- ArrayList<Integer> temp = new ArrayList<>();
- while (!s1.empty()) {
- TreeNode node = s1.pop();
- if (node != null) {
- temp.add(node.val);
- System.out.print(node.val + " ");
- s2.push(node.left);
- s2.push(node.right);
- }
- }
- if (!temp.isEmpty()) {
- list.add(temp);
- layer++;
- System.out.println();
- }
- } else {
- ArrayList<Integer> temp = new ArrayList<>();
- while (!s2.empty()) {
- TreeNode node = s2.pop();
- if (node != null) {
- temp.add(node.val);
- System.out.print(node.val + " ");
- s1.push(node.right);
- s1.push(node.left);
- }
- }
- if (!temp.isEmpty()) {
- list.add(temp);
- layer++;
- System.out.println();
- }
- }
- }
- return list;
- }
- }
相关测试函数
- public class TreeNode {
- int val = 0;
- TreeNode left = null;
- TreeNode right = null;
- public TreeNode(int val) {
- this.val = val;
- }
- public TreeNode(int val, TreeNode left, TreeNode right) {
- this.val = val;
- this.left = left;
- this.right = right;
- }
- }
- import java.util.ArrayList;
- public class TestMain {
- public static void main(String[] args) {
- //注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
- TreeNode G = new TreeNode(1, null, null);
- TreeNode F = new TreeNode(2, null, null);
- TreeNode E = new TreeNode(3, null, null);
- TreeNode D = new TreeNode(4, null, null);
- TreeNode C = new TreeNode(5, F, G);
- TreeNode B = new TreeNode(6, D, E);
- TreeNode A = new TreeNode(8, B, C);
- ArrayList<ArrayList<Integer>> arrayList=new ArrayList<>();
- Solution s=new Solution();
- arrayList= s.print(A);
- //之字形遍历输出
- for(int i=0;i<arrayList.size();i++){
- for (int j=0;j<arrayList.get(i).size();j++){
- System.out.print(arrayList.get(i).get(j)+",");
- }
- System.out.println();
- }
- }
- }
---------------------------------------------
参考链接:
https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
剑指offer五十九之按之字形顺序打印二叉树的更多相关文章
- 剑指offer二十二之从上往下打印二叉树
一.题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 二.思路 二叉树的层次遍历,可以借助队列实现.具体思路详见注释. 三.代码 import java.util.ArrayList; i ...
- 剑指Offer(十九):顺时针打印矩阵
剑指Offer(十九):顺时针打印矩阵 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- 剑指offer五十二之正则表达式匹配
一.题目 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...
- 剑指Offer(十九)——顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 ...
- 剑指offer五十八之对称的二叉树
一.题目 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.二.思路 递归做,详见代码 三.代码 /* public class TreeN ...
- 剑指offer五十六之删除链表中重复的结点
一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 剑指offer五十五之链表中环的入口结点
一.题目 一个链表中包含环,请找出该链表的环的入口结点. 二.思路 方法一: 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程). ...
- 剑指offer五十四之字符流中第一个不重复的字符
一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
随机推荐
- linxu ssh 双端认证 不成功之authorized_keys
linxu ssh 双端认证 不成功之authorized_keys liunx双端认证可以让我们更简便的在两台服务器之间传输文件,配置暂且不说,网上有大部分的文章可以搜索到,今天我要说的是在不成功的 ...
- LA 4670 Dominating Patterns (AC自动机)
题意:给定n个字符串和一个文本串,查找哪个字符串出现的次数的最多. 析:一匹配多,很明显是AC自动机.只需要对原来的进行修改一下,就可以得到这个题的答案, 计算过程中,要更新次数,并且要映射字符串.如 ...
- momery
reg [7:0] moma [255:0] ;//定义一个位宽为8,浓度为什么256的memory. parameter wordsize = 8; parameter memsize = 256; ...
- swagger core 和 swagger ui 如何关联【窥探】
几个片段: package io.swagger.jaxrs.listing; import io.swagger.annotations.ApiOperation; import org.apach ...
- SecureCRT和乱码
示例: # ls /usr/local/r3c/bin/lib /bin/ls: /usr/local/r3c/bin/lib: ????????? 查看系统字符集设置: # locale LANG= ...
- QGIS Server Quickstart
http://live.osgeo.org/en/quickstart/qgis_mapserver_quickstart.html
- How to create a Multi-device Site - some details
https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/index?hl ...
- Trystrtofloat
TryStrToFloat为 ‘+1’和‘-1’和 ‘.1’是可以装换成功的
- Linux测试上行和下载速率
下载安装speedtest-cli测试工具 方法一: pip3 install speedtest-cli 方法二: wget https://github.com/sivel/speedtest-c ...
- ArcGIS下图层范围不正确的两种处理方式
ArcGIS下图层范围不正确,偶尔能碰上这种情况,主要表现为“缩放至图层”时,其显示范围与该图层内所有要素的外包围盒范围不一致.针对这个问题,有两种解决办法. 方法一:导出数据.新创建含有要素的Sha ...