剑指offer:按之字形顺序打印二叉树

xiaoxiao2021-02-28  11

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /* 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>> listAll=new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list; if(pRoot==null) return listAll; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.offer(pRoot); int count=0; while(!queue.isEmpty()){ list=new ArrayList<Integer>(); int size=queue.size(); //按照层数遍历,即一个for循环代表一层 for(int i=0;i<size;i++){ //弹出当前节点值 TreeNode temp=queue.poll(); //count用来区别奇数还是偶数层,然后调换位置 if(count%2==0){ //偶数层从左往右排 list.add(temp.val); }else{ //奇数层从右往左排 list.add(0,temp.val); } //当前节点的左右子树如果不为空,分别入队列 if(temp.left!=null) queue.offer(temp.left); if(temp.right!=null) queue.offer(temp.right); } listAll.add(list); count++; } return listAll; } }

转载请注明原文地址: https://www.6miu.com/read-1149999.html

最新回复(0)