按之字形顺序打印二叉树
题目描述
思路
使用一个队列来进行记录每一层的结点,再使用一个一维整数集合来记录val,使用一个boolean的flag标记,奇数层不反转集合,偶数层反转集合
代码
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 {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) {
// write code here
//头结点为空直接返回
if (pRoot == null) {
return res;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot);
boolean flag = false; //false表示奇数层不用逆转集合
while (!queue.isEmpty()) {
GetFormatRes(queue, flag);
flag = !flag;
}
return res;
}
//得到之字形的的数据记录
private void GetFormatRes(Queue<TreeNode> queue, boolean flag) {
ArrayList<Integer> row = new ArrayList<Integer>();
int n = queue.size();
for (int i = 0; i < n; i++) {
HandleCurrentTreeNodes(row, queue);
}
if (flag) {
Collections.reverse(row);
}
res.add(row);
}
//将队列记录当前层的结点值放入一维集合中,并将下一层的结点记录入队列
private void HandleCurrentTreeNodes(ArrayList<Integer> row,
Queue<TreeNode> queue) {
TreeNode temp = queue.poll();
row.add(temp.val);
if (temp.left != null) {
queue.offer(temp.left);
}
if (temp.right != null) {
queue.offer(temp.right);
}
}
}
总结
慢慢地需要将写的代码更加单元化,但是在方法命名上还是不行,可能是概括能力不行,慢慢锻炼吧:smile: