102.二叉树的层序遍历
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); level.add(cur.val); if (cur.left != null) { queue.offer(cur.left); } if (cur.right != null) { queue.offer(cur.right); } } res.add(level); } return res; }
107.二叉树的层次遍历 II
public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); List<List<Integer>> reves = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); level.add(cur.val); if (cur.left != null) { queue.offer(cur.left); } if (cur.right != null) { queue.offer(cur.right); } } res.add(level); } for (int i = res.size() - 1; i >= 0; i--) { reves.add(res.get(i)); } return reves; }
199.二叉树的右视图
public List<Integer> rightSideView(TreeNode root) { List<Integer> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); res.add(queue.peek().val); for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); if (cur.right != null) { queue.offer(cur.right); } if (cur.left != null) { queue.offer(cur.left); } } } return res; }
637.二叉树的层平均值
public List<Double> averageOfLevels(TreeNode root) { Double sum = new Double(0D); List<Double> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); level.add(cur.val); if (cur.left != null) { queue.offer(cur.left); } if (cur.right != null) { queue.offer(cur.right); } } for (Integer integer : level) { if (integer != null) { double v = new Double(integer).doubleValue(); sum = sum.doubleValue() + v; } } sum = sum / level.size(); res.add(sum); sum = 0D; } return res; }
429.N叉树的层序遍历
public List<List<Integer>> levelOrder(Node root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) { return result; } Queue<Node> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> levelList = new ArrayList<>(); for (int i = 0; i < size; i++) { Node node = queue.poll(); levelList.add(node.val); for (Node child : node.children) { queue.offer(child); } } result.add(levelList); } return result; }
515. 在每个树行中找最大值
public List<Integer> largestValues(TreeNode root) { Integer max = new Integer(0); List<Integer> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); List<Integer> level = new ArrayList<>(); for (int i = 0; i < size; i++) { TreeNode cur = queue.poll(); level.add(cur.val); if (cur.left != null) { queue.offer(cur.left); } if (cur.right != null) { queue.offer(cur.right); } } if (level.size() != 0) { max = level.get(0); } for (int i = 0; i < level.size(); i++) { if (level.get(i) > max) { max = level.get(i); } } res.add(max); } return res; }
116.填充每个节点的下一个右侧节点指针
public TreeNode connect(TreeNode root) {
List<List<TreeNode>> res = new ArrayList<>();
if (root == null) {
return root;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<TreeNode> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
level.add(cur);
if (cur.left != null) {
queue.offer(cur.left);
}
if (cur.right != null) {
queue.offer(cur.right);
}
}
res.add(level);
}
for (List<TreeNode> re : res) {
for (int i = 0; i < re.size(); i++) {
if (i == re.size() - 1) {
re.get(i).next = null;
continue;
}
re.get(i).next = re.get(i + 1);
}
}
return root;
}
117.填充每个节点的下一个右侧节点指针II
public TreeNode connect(TreeNode root) {
List<List<TreeNode>> res = new ArrayList<>();
if (root == null) {
return root;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<TreeNode> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
level.add(cur);
if (cur.left != null) {
queue.offer(cur.left);
}
if (cur.right != null) {
queue.offer(cur.right);
}
}
res.add(level);
}
for (List<TreeNode> re : res) {
for (int i = 0; i < re.size(); i++) {
if (i == re.size() - 1) {
re.get(i).next = null;
continue;
}
re.get(i).next = re.get(i + 1);
}
}
return root;
}