二叉树之把二叉树打印成多行

1.本题知识点

   二叉树

2. 题目描述

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

3. 思路

   考察广度优先遍历,需要用到2个队列。思路跟之字打印类似。
   Java版本:
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 {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer> > result = new ArrayList<>();
        if(pRoot == null) return result;
        //保存每层的节点值
        Queue q1 = new LinkedList<Integer>();
        Queue q2 = new LinkedList<Integer>();
        q1.add(pRoot);
        while(!q1.isEmpty() || !q2.isEmpty()){
            ArrayList<Integer> layerList1 = new ArrayList<>();//每层的输出列表
            ArrayList<Integer> layerList2 = new ArrayList<>();//每层的输出列表
            while(!q1.isEmpty()){
                TreeNode node = (TreeNode) q1.poll();
                if(node != null){
                    layerList1.add(node.val);
                    q2.add(node.left);
                    q2.add(node.right);
                }
            }
            if(!layerList1.isEmpty()){
                result.add(layerList1);
            }
            
            while(!q2.isEmpty()){
                TreeNode node = (TreeNode) q2.poll();
                if(node != null){
                    layerList2.add(node.val);
                    q1.add(node.left);
                    q1.add(node.right);
                }
            }
            if(!layerList2.isEmpty()){
                result.add(layerList2);
            }
        }
        
        return result;
    }
    
}

你可能感兴趣的:(数据结构和算法)