美文网首页
将二叉树打印成多行

将二叉树打印成多行

作者: Hammy | 来源:发表于2018-02-01 21:14 被阅读0次

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

思路:
两种实现方法:
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);
        }
    }
}

相关文章

  • 剑指offer | 把二叉树打印成多行

    把二叉树打印成多行 从上到下按层打印成多行 分析:使用队列

  • 将二叉树打印成多行

    题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路:两种实现方法:1.借助两个队列,用层...

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

  • 数据结构算法(八) 之 树的 2 道面试题 60 & 6

    剑指 Offer 面试题 60(Java 版):把二叉树打印成多行 题目:从上到下按层打印二叉树,同一层的结点按从...

  • 剑指Offer——将二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 相比较层次遍历二叉树,这个地方要求每输...

  • JZ-060-把二叉树打印成多行

    把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。题目链接: 把二叉树...

  • 剑指offer.C++.code61-67

    61. 把二叉树打印成多行 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 62. 序列化二叉树...

  • 《剑指Offer》树考点题解

    题目链接:把二叉树打印成多行 题目简述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 题解思路...

  • 把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 这道题目与“从上往下打印二叉树”很相似...

网友评论

      本文标题:将二叉树打印成多行

      本文链接:https://www.haomeiwen.com/subject/knejzxtx.html