按之字形顺序打印二叉树
2018-03-13 21:06
316 查看
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。import java.util.ArrayList; import java.util.Stack; /* 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) { //判断是否为空 if(pRoot==null){ return new ArrayList(); } //奇偶变量的标志位 int i = 1; //创建两个栈 //存储偶数层 Stack<TreeNode> stack1 = new Stack<>(); //存储奇数层 Stack<TreeNode> stack2 = new Stack<>(); //创建一个接收数据的ArrayList ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>(); //先将根节点导入 stack2.push(pRoot); //如果两个栈都输出则认为空 while(!stack2.empty()||!stack1.empty()){ //如果当前打印的是奇数层,,先保留左子树,因为是栈 if(i%2!=0){ ArrayList<Integer> temp = new ArrayList<Integer>(); while(!stack2.empty()){ TreeNode s2 = stack2.pop(); temp.add(s2.val); //存入左子树 if(s2.left!=null) stack1.push(s2.left); if(s2.right!=null) stack1.push(s2.right); } list.add(temp); } //如果当前打印的是偶数层,,先保留右子树,因为是栈 else{ ArrayList<Integer> temp = new ArrayList<Integer>(); while(!stack1.empty()){ TreeNode s1 = stack1.pop(); temp.add(s1.val); //存入左子树 if(s1.right!=null) stack2.push(s1.right); if(s1.left!=null) stack2.push(s1.left); } list.add(temp); } i++; } return list; } }
相关文章推荐
- 剑指Offer_59_按之字形顺序打印二叉树
- 剑指offer--按之字形顺序打印二叉树
- 剑指offer-----按之字形顺序打印二叉树(java版)
- 【剑指Offer】按之字形顺序打印二叉树
- 牛客网剑指offer-按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 《剑指offer》刷题笔记(树):按之字形顺序打印二叉树
- 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- 剑指offer60题(按之字形顺序打印二叉树)
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- python剑指offer系列按之字形顺序打印二叉树
- 按之字形顺序打印二叉树(二叉树的层次遍历)
- 剑指offer(C++)——按之字形顺序打印二叉树
- 剑指offer—按之字形顺序打印二叉树
- 面试题61. 按之字形顺序打印二叉树
- (剑指Offer)面试题61:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 剑指offer61 按之字形顺序打印二叉树
- 61:按之字形顺序打印二叉树