二叉树的层序遍历
二叉树的层序遍历
利用队列的先进先出的特性,实现二叉树的层序遍历
//# 二叉树的层序正序遍历
public static List<List<Integer>>
levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
//创建优先级队列
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
Node temp = queue.poll();
list.add(temp.val);
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
}
result.add(list);
}
return result;
}
//# 二叉树的层序反序遍历
public static List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
//创建优先级队列
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
Node temp = queue.poll();
list.add(temp.val);
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
}
result.add(list);
}
Collections.reverse(result);
return result;
}
//二叉树的右视图
public static List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
//创建优先级队列
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
Node temp = queue.poll();
//二叉树右视图的体现
if (i == size - 1) {
list.add(temp.val);
}
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
}
result.add(list);
}
return result;
}
//二叉树的层平均值
public static List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
//创建优先级队列
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
int sum = 0;//统计每一层的值
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
Node temp = queue.poll();
sum += temp.val;
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
}
//将平均值添加到集合中
list.add(sum/size);
result.add(list);
}
return result;
}

浙公网安备 33010602011771号