前言
仅记录学习笔记,如有错误欢迎指正。
题目
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)示例
- 输入:{1,2,3,#,#,4,5}
- 输出: [[1],[3,2],[4,5]]
解法
层次遍历的思路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 ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if(pRoot == null){
return res;
}
LinkedList<TreeNode> q = new LinkedList<>();
q.push(pRoot);
int level = 0;
while(!q.isEmpty()){
ArrayList<Integer> list = new ArrayList<>();
int size = q.size();
while(size-->0){
TreeNode cur = q.pop();
// 层数为奇数末尾添加元素,层数为偶数头部添加元素
if(level % 2 == 0)
list.add(cur.val);
else
list.add(0,cur.val);
if (cur.left != null)
q.addLast(cur.left);
if (cur.right != null)
q.addLast(cur.right);
}
res.add(list);
level++;
}
return res;
}
}
层次遍历!! offer = add
(push加在LinkedList的队头,add队尾)
poll = pop
不过多加了判断空的方法!
import java.util.*;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null){
return list;
}
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);
while (!q.isEmpty()) {
TreeNode treeNode = q.poll();
if (treeNode.left != null) {
q.offer(treeNode.left);
}
if (treeNode.right != null) {
q.offer(treeNode.right);
}
list.add(treeNode.val);
}
return list;
}
}