剑指offer(五十三)之按之字形顺序打印二叉树
Posted 奔跑着的国风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(五十三)之按之字形顺序打印二叉树相关的知识,希望对你有一定的参考价值。
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
代码:
<span style="color:#000099;">import java.util.ArrayList; 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>> result = new ArrayList<ArrayList<Integer>>(); if(pRoot == null){ return result; } boolean leftToRight = true; Queue<TreeNode> layer = new LinkedList<TreeNode>(); ArrayList<Integer> layerList = new ArrayList<Integer>(); layer.add(pRoot); int start = 0, end = 1; while(!layer.isEmpty()){ TreeNode cur = layer.remove(); layerList.add(cur.val); start++; if(cur.left!=null){ layer.add(cur.left); } if(cur.right!=null){ layer.add(cur.right); } if(start == end){ end = layer.size(); start = 0; if(!leftToRight){ result.add(reverse(layerList)); }else{ result.add(layerList); } leftToRight = !leftToRight; layerList = new ArrayList<Integer>(); } } return result; } private ArrayList reverse(ArrayList<Integer> layerList) { int length = layerList.size(); ArrayList<Integer> reverseList = new ArrayList<Integer>(); for(int i = length-1; i >= 0;i--){ reverseList.add(layerList.get(i)); } return reverseList; } }</span>
以上是关于剑指offer(五十三)之按之字形顺序打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章