题目来自LeetCode,链接:面试题32 - I. 从上到下打印二叉树。具体描述为:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
这道题其实就是二叉树的层序遍历,直接用固定套路做就行:
- 初始化一个队列,将根节点入队
- 只要队列非空就执行下面循环:
- 将队列中节点出队,其值加入结果链表
- 如果当前出队节点的左右子节点非空,则加入队列
JAVA版代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if (root == null) {
return new int[0];
}
List<Integer> resultList = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
resultList.add(node.val);
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
int[] result = new int[resultList.size()];
for (int i = 0; i < result.length; ++i) {
result[i] = resultList.get(i);
}
return result;
}
}
提交结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/2bb6429d2bca6ba48709cc478659c95a.png)
Python版代码如下:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
if root is None:
return []
import queue
q = queue.Queue()
q.put(root)
result = []
while not q.empty():
node = q.get()
result.append(node.val)
if node.left is not None:
q.put(node.left)
if node.right is not None:
q.put(node.right)
return result
提交结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/80cfcee9010bfc5b9b99a6e8d931341e.png)