将二叉树打印成多行

2018-02-01  本文已影响0人  Hammy

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

思路:
两种实现方法:
1.借助两个队列,用层数进行控制两个队列的offer.
2.通过每层元素的个数来控制队列的offer和新数组的生成.

代码:

public class PrintThree
{
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
        if(pRoot == null)
            return arrayLists;

        Queue<TreeNode> queue = new LinkedList<>();
        ArrayList<Integer> arrayList = new ArrayList<>();
        int start = 0;
        int end = 1;
        queue.offer(pRoot);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            start++;
            if(node.left != null)
                queue.add(node.left);
            if(node.right != null)
                queue.add(node.right);

            if(start == end){
                start = 0;
                end = queue.size();
                arrayLists.add(arrayList);
                arrayList = new ArrayList<>();
            }
        }
        return arrayLists;
    }
}
public class PrintTwo
{
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
        if(pRoot == null){
            return arrayLists;
        }
        int number = 1;
        //奇数队列
        Queue<TreeNode> queue1 = new LinkedList<>();
        //偶数队列
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.add(pRoot);

        while(!queue1.isEmpty()||!queue2.isEmpty()){
            if(number % 2 != 0){
                ArrayList<Integer> arrayList = new ArrayList<>();
                addNode(queue1,queue2,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }else{
                ArrayList<Integer> arrayList = new ArrayList<>();
                addNode(queue2,queue1,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }
        }
        return arrayLists;
    }
    private void addNode(Queue<TreeNode> queue1,Queue<TreeNode> queue2,ArrayList<Integer> arrayList){
        while(!queue1.isEmpty()){
            TreeNode node = queue1.poll();
            arrayList.add(node.val);
            if(node.left != null)
                queue2.add(node.left);
            if(node.right != null)
                queue2.add(node.right);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读