剑指offer面试题61 按之字形顺序打印二叉树(java实现)
来源:互联网 发布:逆战天梯卡数据不扣分 编辑:程序博客网 时间:2024/05/29 15:21
解题思路:
利用两个栈stack1和stack2,stack1暂存奇数层的节点,stack2暂存偶数层的节点。当stack1中节点即奇数层节点出栈时,存入一个当前层次的arraylist中,与此同时,判断该节点是否有左、右子节点,若有,则在stack2中先压入左子节点,后压入右子节点,这样做是为了满足之字形顺序这个条件。当stack1中所有节点都出栈时,将当前层的arraylist加入到一个存放所有层的arraylist中,然后将层次level加1。当stack2中节点即偶数层节点出栈时,步骤和stack1类似,只是在stack1中先压入右子节点,再压入左子节点。
import java.util.ArrayList;import java.util.Stack;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>> arrayListAllLevel = new ArrayList<>();if (pRoot == null) {return arrayListAllLevel;}//stack1暂存奇数层节点Stack<TreeNode> stack1 = new Stack<>();//stack2暂存奇数层节点Stack<TreeNode> stack2 = new Stack<>();//初始层次为第一层int level = 1;//将第1层的节点按从左到右的顺序入栈stack1.push(pRoot);while (!stack1.isEmpty() || !stack2.isEmpty()) {//保存该层中栈的元素ArrayList<Integer> arrayListlevel = new ArrayList<>();//判断是哪一个栈进行出栈操作if (level % 2 == 1) {//当奇数层执行出栈操作时//如果stack1还存在元素,则继续出栈while ( !stack1.isEmpty()) {TreeNode node = stack1.pop();//出栈同时加入到奇数层次的数组中arrayListlevel.add(node.val);//在出栈的同时,将此节点的左右子节点入stack2//同时存入另一个栈的顺序是先存左子节点,再存右子节点if (node.left != null) {stack2.push(node.left);}if (node.right != null) {stack2.push(node.right);}}level++;//stack1中所有元素出栈完毕后,将奇数层次的所有元素加入到整个线性表中arrayListAllLevel.add(arrayListlevel);} else {//stack2执行出栈操作//当偶数层执行出栈操作时//如果stack2还存在元素,则继续出栈while ( !stack2.isEmpty()) {TreeNode node = stack2.pop();//出栈同时加入到奇数层次的数组中arrayListlevel.add(node.val);//在出栈的同时,将此节点的左右子节点入stack1//同时存入另一个栈的顺序是先存右子节点,再存左子节点if (node.right != null) {stack1.push(node.right);}if (node.left != null) {stack1.push(node.left);}}level++;//stack2中所有元素出栈完毕后,将偶数层次的所有元素加入到整个线性表中arrayListAllLevel.add(arrayListlevel);}}return arrayListAllLevel;}}
阅读全文
0 0
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- java面试题(剑指offer):之字形打印二叉树
- 《剑指Offer》学习笔记--面试题61:按之字形顺序打印二叉树
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 剑指offer--面试题61:按之字形顺序打印二叉树
- 剑指offer-面试题61-按之字形顺序打印二叉树
- 剑指offer 面试题61 按之字形顺序打印二叉树
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 《剑指offer》Python语言 面试题61:按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 剑指offer-----按之字形顺序打印二叉树(java版)
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 剑指offer(56)-按之字形顺序打印二叉树
- 新版Lua服务器下线处理
- 【代码片-3】 基于jsp+javabean+servlet+mongodb 增删改查
- commons pool2对象池入门
- SSM整合手机联系人
- LRUCache,DiskLrucache,四种引用的区别,以及图片二次采样,三级缓存小知识
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- AlarmManager与NotificationManager
- 数据库连接池的代码实例(DHCP、C3P0)
- 设计模式--备忘录模式
- G
- java学习_小程序(四线程断点网络资源下载,即时进度反馈)
- java求解一给定数字的二进制表达中的1的个数
- ctrl+v粘贴快捷键突然不能使用的原因及解决方案
- Linux学习总结(37)——CentOS7下Firewall防火墙配置用法详解