按之字形顺序打印二叉树
2016-11-01 14:49
197 查看
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
/* 这个编程题的思路还是按照层次遍历的思路,只不过是奇偶行时要不要逆序的时候判断一下而已 */ /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { //记录每一层的节点的值 ArrayList<Integer> in= new ArrayList<Integer>(); //将每一层的节点的值添加到二维list中 ArrayList<ArrayList<Integer> > out=new ArrayList<ArrayList<Integer> >(); //保存当前层的节点 Queue<TreeNode> q =new LinkedList<TreeNode>(); //记录下一层的节点 Queue<TreeNode> qin =new LinkedList<TreeNode>(); //利用栈进行逆序 Stack s=new Stack(); if(pRoot==null){ return out; } else{ q.add(pRoot); int step=0; while(true){ while(!q.isEmpty()){ TreeNode node=q.remove(); if(node.left!=null){ qin.add(node.left); } if(node.right!=null){ qin.add(node.right); } if(step%2==0){ in.add(node.val); } else{ s.push(node.val); } } if(step%2!=0){ while(!s.isEmpty()){ in.add((Integer) s.pop()); } } out.add(in); step++; s=new Stack(); in=new ArrayList<Integer>(); if(qin.isEmpty()){ break; } q=qin; qin =new LinkedList<TreeNode>(); } } return out; } }
相关文章推荐
- 按之字形顺序打印二叉树
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 剑指offer 61题 【树】按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 剑指offer 按之字形顺序打印二叉树
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 剑指offer--(16)按之字形顺序打印二叉树--Java描述
- 剑指offer—按之字形顺序打印二叉树
- 数据结构与算法分析笔记与总结(java实现)--二叉树17:按之字形顺序打印二叉树
- 55.按之字形顺序打印二叉树
- 61.按之字形 ba66 顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- 剑指Offer--061-按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 面试题68:按之字形顺序打印二叉树
- 51.之字形顺序打印二叉树
- 剑指offer--按之字形顺序打印二叉树