剑指offer-按之字形顺序打印二叉树
Posted moonbeautiful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-按之字形顺序打印二叉树相关的知识,希望对你有一定的参考价值。
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题目链接:
分析:
因为只需记录打印顺序,所以只有顺序相反就好。
每行按从左到右的方式记录下一层节点。
import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; /* 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>> list = new ArrayList<>(); if(null == pRoot){ return list; } //两个队列,raw主队列 LinkedList<TreeNode> raw = new LinkedList<TreeNode>(); raw.add(pRoot); boolean flag = true; while(raw.size()!=0){ //记录下当前行的大小 int size = raw.size(); ArrayList<Integer> tmp = new ArrayList<Integer>(); Iterator<TreeNode> iter = null; //flag=true 从左到右打印,false从右到左打印 if(flag){ iter = raw.iterator(); }else{ iter = raw.descendingIterator(); } //下一次方向相反 flag = !flag; while(iter.hasNext()){ tmp.add(iter.next().val); } list.add(tmp); //将下一行节点按从左到右记录到raw队列中 for(int i=0;i<size;i++){ TreeNode cur = raw.pop(); if(cur.left != null){ raw.add(cur.left); } if(cur.right != null){ raw.add(cur.right); } } } return list; } }
以上是关于剑指offer-按之字形顺序打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章