很明显这里不能用解决树问题最常用的前序,中序,后续遍历算法。结合队列先进先出的特点,可以利用队列来完成此题。
我的代码:
class Solution {
public int[] levelOrder(TreeNode root) {
if (root == null) return new int[0];
LinkedList<TreeNode> list = new LinkedList<>();
ArrayList<Integer> ansTmp = new ArrayList<>();
while (root != null) {
if (root.left != null) list.add(root.left);
if (root.right != null) list.add(root.right);
ansTmp.add(root.val);
root = list.poll();
}
int[] ans = new int[ansTmp.size()];
int index = 0;
for (Integer i : ansTmp) {
ans[index++] = i;
}
return ans;
}
}
我的代码中,循环终止的条件是根据当前节点root是否为空来判断的,题解中是根据queue队列是否为空队列判断的。不过我建议用队列来判断,特别是后面的改进题目,用队列来说好一些。
路飞题解代码:
class Solution {
public int[] levelOrder(TreeNode root) {
if(root == null) return new int[0];
Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};
ArrayList<Integer> ans = new ArrayList<>();
while(!queue.isEmpty()) {
TreeNode node = queue.poll();
ans.add(node.val);
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
int[] res = new int[ans.size()];
for(int i = 0; i < ans.size(); i++)
res[i] = ans.get(i);
return res;
}
}