剑指offer——按之字形打印二叉树

来源:互联网 发布:java初学者知乎 编辑:程序博客网 时间:2024/06/16 03:11

题目描述

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

思路:层次遍历,增加一个boolean类型变量来判定每次是从左向右,还是从右向左。

用Collections的reverse方法来逆置集合。


import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.Queue;/*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>>lists = new ArrayList<>(); if(pRoot==null)return lists; Queue<TreeNode>queue = new LinkedList<>(); queue.offer(pRoot); boolean left = true; while(!queue.isEmpty()){ int len = queue.size(); ArrayList<Integer> list = new ArrayList<>(); for(int i=0;i<len;i++){ TreeNode node = queue.poll(); list.add(node.val); if(node.left!=null)queue.offer(node.left); if(node.right!=null)queue.offer(node.right); }//for if(left){ lists.add(list); }else {Collections.reverse(list);lists.add(list); } left =!left; }//while  return lists;    }}


原创粉丝点击