1. 题目描述

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

2. 双向队列

/*思路:利用Java中的LinkedList的底层实现是双向链表的特点。1)可用做队列,实现树的层次遍历2)可双向遍历,奇数层时从前向后遍历,偶数层时从后向前遍历
*/

3. 代码(双向链表+层次遍历)

import java.util.*;public class Solution {public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {return levelorder(pRoot);}public static ArrayList<ArrayList<Integer>> levelorder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();ArrayList<ArrayList<Integer>> result = new ArrayList<>();if(root == null) return result;queue.offer(root); // 首先将根节点root入队int level = 0;//记录层数while (!queue.isEmpty()) {// Queue不为空则循环LinkedList<Integer> node = new LinkedList<>();// 保存每一层节点的值int length = queue.size();// 每一层的节点数目while (length > 0) {TreeNode tree = queue.poll();if (tree.left != null) {queue.offer(tree.left);}if (tree.right != null) {queue.offer(tree.right);}if((level+1)%2==0){node.addFirst(tree.val);}else{node.add(tree.val);}length--;}// node为本层遍历结果// 将linkedlist转成 ArrayListArrayList<Integer> arrayNode = new ArrayList<>();for (Integer i: node) {arrayNode.add(i);}result.add(arrayNode);//循环结束后,得到的Queue为下一层做准备,level++;}return result;}
}

转载于:https://www.cnblogs.com/haimishasha/p/11520969.html

剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)相关推荐

  1. 【剑指offer】之字形打印二叉树,C++实现

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打 ...

  2. 剑指Offer——P32——之字形打印二叉树

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

  3. 剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 思路 详见链接 代码 #class Node: # def __ini ...

  4. 剑指offer——面试题24:二叉搜索树的后序遍历序列

    剑指offer--面试题24:二叉搜索树的后序遍历序列 Solution1: 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二 ...

  5. 剑指offer系列-09.用两个栈设计队列

    剑指offer系列第09题.用两个栈设计队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整 ...

  6. 剑指offer:面试题33. 二叉搜索树的后序遍历序列

    题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜 ...

  7. 剑指offer(Java实现) 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 先找到右子树的开始位置,然后分别进行左右 ...

  8. 剑指Offer对答如流系列 - 用两个栈实现队列

    面试题8:用两个栈实现队列 一.题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 二 ...

  9. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...

最新文章

  1. LA 3890 (半平面交) Most Distant Point from the Sea
  2. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第11章-大系统的分散控制
  3. 图像处理常用边缘检测算子总结
  4. cuba 平台_认识CLI for CUBA平台
  5. java 反射的效率_如何提高使用Java反射的效率?
  6. LeetCode 144. 树的前序遍历迭代写法
  7. 玉伯 对 前端的 金玉良言
  8. Bash终端命令行,使用privoxy将socks代理转成http代理
  9. 重载前自增运算符和后自增运算符
  10. 腾讯教育 App Flutter 跨端点播组件实践
  11. 奥鹏教育计算机应用基础试题及答案,奥鹏计算机应用基础试题及答案.pdf
  12. python学习笔记(八)传递任意数量的实参
  13. 如何玩转阿里巴巴国际站Trueview视频?
  14. 用JAVA爬虫爬网站的图片
  15. 音频设置 audio
  16. ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(3)
  17. Galera/mysql 集群 备忘
  18. STL:string容器特性、定义、初始化、等号、取值、拼接、查找、替换、比较、字串、插入、删除
  19. foxmail导入outlook部分邮件
  20. 路由器里面的DHCP是什么功能?

热门文章

  1. 单元测试Fluent验证
  2. (一)通过深度学习进行COVID-19诊断
  3. VS 2019 for Mac 第 3 个预览版发布,新编辑器、Xamarin 开发改进
  4. python手机销售系统结论于心得_python实现手机销售管理系统
  5. python apache_Windows 配置 Apache Python CGI
  6. 微信多开txt_微信(电脑版)多开教程
  7. padding、margin百分比
  8. [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST
  9. 华为手机如何升级鸿蒙系统_再见了安卓!华为鸿蒙系统正式上线:这几款手机可先升级...
  10. html代码重排,是否有可能在html中格式化/重排html?