您的位置:首页 > 其它

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

2017-09-30 14:36 337 查看
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推

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;
}

}
添加笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: