第60题——把二叉树打印成多行

317 阅读1分钟

题目:

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

思路:

层次遍历二叉树,并记录出队结点所在层数

Java

package nowcoder;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class S60_BTreePrint {
    public ArrayList<ArrayList<Integer>> print(TreeNode root){
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        if (root == null)
            return list;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        int layerCount = 1;
        int layer = 1;
        int count = 0;
        ArrayList<Integer> temp = new ArrayList<Integer>();
        while (!queue.isEmpty()){
            TreeNode out = queue.poll();
            count++;
            temp.add(out.val);
            if (out.left != null)
                queue.offer(out.left);
            if (out.right != null)
                queue.offer(out.right);
            if (count == layerCount){
                layer++;
                layerCount = queue.size();
                count = 0;
                list.add(temp);
                temp = new ArrayList<Integer>();
            }
        }
        return list;
    }
    public static void main(String[] args){
        S60_BTreePrint s60 = new S60_BTreePrint();
        PrintTreeLayer p = new PrintTreeLayer();
        Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
        TreeNode root = p.arrayToTree(array, 0);
        System.out.println(s60.print(root));
    }
}

结果:

[[1], [2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

Python

import PrintTreeLayer

class BTreePrint:
    def print(self, root):
        if not root:
            return []
        nodeQueue = [root]
        result = []
        while nodeQueue:
            res = []
            nextQueue = []
            for i in nodeQueue:
                res.append(i.val)
                if i.left:
                    nextQueue.append(i.left)
                if i.right:
                    nextQueue.append(i.right)
            nodeQueue = nextQueue
            result.append(res)
        return result
if __name__ == '__main__':
    test = BTreePrint()
    p = PrintTreeLayer.PrintTreeLayer()
    array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    root = p.arrayToTree(array, 0)
    print(test.print(root))