剑指Offer60:把二叉树打印成多行(Java)

思路分析

沿用上一题“按之字形顺序打印二叉树”的思路,用两个队列实现分层,当一个队列空了意味着这一层遍历完了。

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

Java代码:

import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    ArrayList<ArrayList<Integer> > res=new ArrayList<>();
    Queue<TreeNode> que1=new LinkedList<>();
    Queue<TreeNode> que2=new LinkedList<>();
    que1.offer(pRoot);//Stack,Queue都能用isEmpty()判空
        while(!que1.isEmpty()||!que2.isEmpty()){
            ArrayList<Integer> tmp1=new ArrayList<Integer>();
            ArrayList<Integer> tmp2=new ArrayList<Integer>();
            while(!que1.isEmpty()){//队列为空,即遍历了一层结点
                TreeNode node=que1.poll();
                if(node!=null){
                    tmp1.add(node.val);
                    que2.offer(node.left);
                    que2.offer(node.right);
                }
            }
            if(!tmp1.isEmpty()){
                 res.add(tmp1);
            }
            while(!que2.isEmpty()){
                TreeNode node=que2.poll();
                if(node!=null){
                    tmp2.add(node.val);
                    que1.offer(node.left);
                    que1.offer(node.right);
                }
            }
            if(!tmp2.isEmpty()){
               res.add(tmp2);
            }
        }
        return res;
    }
}

猜你喜欢

转载自www.cnblogs.com/dongmm031/p/12327870.html