zl程序教程

您现在的位置是:首页 >  其他

当前栏目

把二叉树打印成多行_60

2023-04-18 16:11:02 时间
题目描述

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

思路

和之字打印二叉树十分类似,不过这里要把实现方式由两个栈实现变成两个队列实现

代码:
  ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> res=new ArrayList<>();

        if (pRoot==null){
            return res;
        }

        Queue<TreeNode> oddQueue=new LinkedList<>();
        Queue<TreeNode> evenQueue=new LinkedList<>();
        oddQueue.add(pRoot);

        //当前遍历奇书行
        boolean isOdd=true;
        //当前遍历的是
        while (!oddQueue.isEmpty()||!evenQueue.isEmpty()){
            ArrayList<Integer> itemRow= new ArrayList<>();

            if (isOdd){
                while (!oddQueue.isEmpty()){
                    final TreeNode poll = oddQueue.poll();
                    itemRow.add(poll.val);
                    if (poll.left!=null){
                        evenQueue.add(poll.left);
                    }
                    if (poll.right!=null){
                        evenQueue.add(poll.right);
                    }
                }
            }else {
                while (!evenQueue.isEmpty()){
                    final TreeNode poll = evenQueue.poll();
                    itemRow.add(poll.val);
                    if (poll.left!=null){
                        oddQueue.add(poll.left);
                    }
                    if (poll.right!=null){
                        oddQueue.add(poll.right);
                    }
                }
            }
            res.add(itemRow);
            isOdd=!isOdd;
            continue;
        }

        return res;
    }