摇摆打印二叉树

Posted dream-flying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摇摆打印二叉树相关的知识,希望对你有一定的参考价值。

问题

  请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

分析:

  (1)对树进行层次遍历:使用队列

  (2)需要单独记录每一层的序列:两个队列交替使用

 

code:

  

//树节点
public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }
    }
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        /*
        层次遍历:队列
        奇数行:左——>右
        偶数行:右->左(奇数行的逆序)
         */
        ArrayList<ArrayList<Integer>> allList = new ArrayList<ArrayList<Integer>>();
        if(pRoot==null){
            return null;
        }
        Queue<TreeNode>[] queue = new Queue[2];
        queue[0] = new ArrayDeque<>();//奇数行
        queue[1] = new ArrayDeque<>();//偶数行
        int count=1; //记录当前到达的层数
        queue[1].add(pRoot);
        while(!queue[0].isEmpty() || !queue[1].isEmpty()){
            ArrayList<Integer> list = new ArrayList<>();
            while(!queue[count%2].isEmpty()){
                TreeNode temp = queue[count%2].poll();
                list.add(temp.val);
                if(temp.left!=null){
                    queue[(count+1)%2].add(temp.left);
                }
                if(temp.right!=null){
                    queue[(count+1)%2].add(temp.right);
                }
            }
       //偶数行:翻转序列
if(count%2==0){ Collections.reverse(list); } allList.add(list); count++; } return allList; }

 

以上是关于摇摆打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现二叉树的分层打印

python代码打印二叉树某一特定层的节点

剑指offer_二叉树的打印合集(C++_上下打印.换行打印.之字打印_bfs+栈与队列+用表格模拟栈队列操作)

剑指Offer-从上到下打印二叉树

建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果

从上往下打印二叉树