面试题61:按之字形顺序打印二叉树
来源:互联网 发布:一个平台优化方案 编辑:程序博客网 时间:2024/06/18 06:36
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路: 这道题看上去像是二叉树的层次遍历,但是又比二叉树的层次遍历复杂,先看下二叉树层次遍历的代码
import java.util.LinkedList; public class LevelOrder { public void levelIterator(BiTree root) { if(root == null) { return ; } LinkedList<BiTree> queue = new LinkedList<BiTree>(); BiTree current = null; queue.offer(root);//将根节点入队 while(!queue.isEmpty()) { current = queue.poll();//出队队头元素并访问 System.out.print(current.val +"-->"); if(current.left != null)//如果当前节点的左节点不为空入队 { queue.offer(current.left); } if(current.right != null)//如果当前节点的右节点不为空,把右节点入队 { queue.offer(current.right); } } } }
再来看这道题的代码, 思路都写在了代码里面
import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > resultLists = new ArrayList<ArrayList<Integer> >(); if(pRoot == null){ return resultLists; } //借助队列实现每一层遍历 Queue <TreeNode> queue = new LinkedList <TreeNode>(); //Queue是接口,一般用LinkedList实现 //借助栈实现偶数层便利结果的反转,其实就是队列的反转 Stack <TreeNode> stack = new Stack <TreeNode>(); int len =1 ; //len:打印的层数 TreeNode tmp = null; queue.offer(pRoot); while(!queue.isEmpty()){ //while循环代表整个二叉树的遍历 ArrayList<Integer> list = new ArrayList<Integer>(); //创建数组保存每一层的节点 int size = queue.size(); //size代表每一层的节点个数 while(size-- >0){ //每一层遍历 tmp = queue.poll(); if((len&1) == 0){ //偶数层 stack.push(tmp); }else{ //奇数层 list.add(tmp.val); } if(tmp.left!=null){ queue.offer(tmp.left); } if(tmp.right!=null){ queue.offer(tmp.right); } } while(!stack.isEmpty()){ list.add(stack.pop().val); } //每一层遍历结束后 len++; resultLists.add(list); } return resultLists; }}
阅读全文
0 0
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题68:按之字形顺序打印二叉树
- 面试题61. 按之字形顺序打印二叉树
- 《剑指Offer》学习笔记--面试题61:按之字形顺序打印二叉树
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 剑指offer--面试题61:按之字形顺序打印二叉树
- 剑指offer-面试题61-按之字形顺序打印二叉树
- 剑指offer 面试题61 按之字形顺序打印二叉树
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 《剑指offer》Python语言 面试题61:按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- Redis持久化
- elasticsearch api与nodejs 调用实例
- Win10配置TensorFlow
- Spark源码--JobListener
- QTime
- 面试题61:按之字形顺序打印二叉树
- TensorFlow 优化函数
- [51NOD] 1265 四点共面 [数学&向量叉积]
- poj3254-二进制状态压缩
- 工业设计原则
- aop的xml文件配置
- 微信小程序开发入门
- Python2.7中的super方法浅见
- C语言实验——计算表达式