使用队列进行层序遍历。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>>ans = new ArrayList<>();
Queue<TreeNode>q = new LinkedList<>();
if(root == null)
{
return ans;
}
q.offer(root);
int num = 1;
while(!q.isEmpty())
{
List<Integer>temp = new ArrayList<>();
num = q.size();
while(num != 0)
{
TreeNode t = q.poll();
temp.add(t.val);
if(t.left != null)
{
q.offer(t.left);
}
if(t.right != null)
{
q.offer(t.right);
}
num--;
}
ans.add(temp);
}
return ans;
}
}
107. 二叉树的层序遍历 II - 力扣(LeetCode)
在上一题的基础上,翻转一下ans
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>>ans = new ArrayList<>();
Queue<TreeNode>q = new LinkedList<>();
if(root == null)
{
return ans;
}
q.offer(root);
int num = 1;
while(!q.isEmpty())
{
List<Integer>temp = new ArrayList<>();
num = q.size();
while(num != 0)
{
TreeNode t = q.poll();
temp.add(t.val);
if(t.left != null)
{
q.offer(t.left);
}
if(t.right != null)
{
q.offer(t.right);
}
num--;
}
ans.add(temp);
}
Collections.reverse(ans);
return ans;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer>ans = new ArrayList<>();
Queue<TreeNode>q = new LinkedList<>();
if(root == null)
{
return ans;
}
q.offer(root);
int num = 1;
while(!q.isEmpty())
{
num = q.size();
while((num - 1) != 0)
{
TreeNode temp = q.poll();
if(temp.left != null)
{
q.offer(temp.left);
}
if(temp.right != null)
{
q.offer(temp.right);
}
num--;
}
TreeNode t = q.poll();
if(t.left != null)
{
q.offer(t.left);
}
if(t.right != null)
{
q.offer(t.right);
}
ans.add(t.val);
}
return ans;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double>ans = new ArrayList<>();
Queue<TreeNode>q = new LinkedList<>();
if(root == null)
{
return ans;
}
q.offer(root);
int num = 1;
while(!q.isEmpty())
{
num = q.size();
int tnum = num;
long ad = 0;
while(num != 0)
{
TreeNode temp = q.poll();
if(temp.left != null)
{
q.offer(temp.left);
}
if(temp.right != null)
{
q.offer(temp.right);
}
ad += temp.val;
num--;
}
double cur = (double)ad / (double)tnum;
ans.add(cur);
}
return ans;
}
}
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>>ans = new ArrayList<>();
if(root == null)
{
return ans;
}
Queue<Node>q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty())
{
List<Integer>temp = new ArrayList<>();
int num = q.size();
while(num != 0)
{
Node t = q.poll();
temp.add(t.val);
List<Node>list = t.children;
for(Node n : list)
{
q.offer(n);
}
num--;
}
ans.add(temp);
}
return ans;
}
}
515. 在每个树行中找最大值 - 力扣(LeetCode)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer>ans = new ArrayList<>();
if(root == null)
{
return ans;
}
Queue<TreeNode>q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty())
{
int num = q.size();
int max = Integer.MIN_VALUE;
while(num != 0)
{
TreeNode temp = q.poll();
if(temp.left != null)
{
q.offer(temp.left);
}
if(temp.right != null)
{
q.offer(temp.right);
}
max = max > temp.val ? max : temp.val;
num--;
}
ans.add(max);
}
return ans;
}
}