- 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
public class Solution {
public ArrayList<Integer> topToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if (root == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
return list;
}
}
2.如果需要每一层分开
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) return res;
LinkedList<TreeNode> nodes = new LinkedList<>();
nodes.offer(root);
while(!nodes.isEmpty()) {
List<Integer> tmp = new LinkedList<>();
for (int i = nodes.size();i > 0; i--) {
TreeNode node = nodes.poll();
tmp.add(node.val);
if (node.left != null) {
nodes.offer(node.left);
}
if (node.right != null) {
nodes.offer(node.right);
}
}
res.add(tmp);
}
return res;
}
}
3.如果需要按照之字形
class Solution {
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);
boolean forward = true;
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode cur = queue.poll();
if (forward) {
list.add(cur.val);
} else {
list.add(0, cur.val);
}
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
forward = !forward;
res.add(list);
}
return res;
}
}
网友评论