- 题目描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回: [3,9,20,15,7] 提示: 节点总数 <= 1000
- 解法:层序遍历
用一个双端队列(python有collections模块,时间复杂度为O(1))保存当前左右子树,然后不断访问双端队列把节点的值保存到res数组中。
解法类似求二叉树深度:https://www.cnblogs.com/yeshengCqupt/p/13462456.html
class Solution: def levelOrder(self, root: TreeNode) -> List[int]: queue = [] res = [] if not root: return [] queue.append(root) res.append(root.val) while queue: tmp = [] for node in queue: if node.left: tmp.append(node.left) res.append(node.left.val) if node.right: tmp.append(node.right) res.append(node.right.val) queue = tmp return res
别人的代码:
class Solution: def levelOrder(self, root: TreeNode) -> List[int]: if not root: return [] res = [] queue = collections.deque() queue.append(root) while queue: node = queue.popleft() res.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return res