按之字形顺序打印二叉树, 把二叉树打印成多行

来源:互联网 发布:cn域名ns记录是什么 编辑:程序博客网 时间:2024/05/24 07:24

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

import java.util.*;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        ArrayList<ArrayList<Integer> > listAll = new ArrayList<ArrayList<Integer> >();        if (pRoot == null) return listAll;        Queue<TreeNode> queue = new LinkedList<>();        queue.add(pRoot);//      System.out.println(queue.size());        while (true) {            ArrayList<Integer> list = new ArrayList<>();            int k = queue.size();//保存当前的队列的长度,因为后面元素加入会改变长度大小            if (k == 0) break;            for (int i = 0; i < k; i++) {//移除当前行的所有元素                TreeNode p = queue.peek();                list.add(p.val);                if (p.left != null) queue.add(p.left);                if (p.right != null) queue.add(p.right);                queue.remove(p);            }            listAll.add(list);        }        //奇数行的list进行reverse        for (int i = 0; i < listAll.size(); i++) {            if (i%2 != 0) {                Collections.reverse(listAll.get(i));            }        }        return listAll;    }}

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

import java.util.*;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        ArrayList<ArrayList<Integer> > listAll = new ArrayList<ArrayList<Integer> >();        if (pRoot == null) return listAll;        Queue<TreeNode> queue = new LinkedList<>();        queue.add(pRoot);//      System.out.println(queue.size());        while (true) {            ArrayList<Integer> list = new ArrayList<>();            int k = queue.size();//保存当前的队列的长度,因为后面元素加入会改变长度大小            if (k == 0) break;            for (int i = 0; i < k; i++) {//移除当前行的所有元素                TreeNode p = queue.peek();                list.add(p.val);                if (p.left != null) queue.add(p.left);                if (p.right != null) queue.add(p.right);                queue.remove(p);            }            listAll.add(list);        }//      //奇数行的list进行reverse//      for (int i = 0; i < listAll.size(); i++) {//          if (i%2 != 0) {//              Collections.reverse(listAll.get(i));//          }//      }        return listAll;    }}添加笔记
原创粉丝点击