leetcode--102:(二叉树)Binary Tree Level Order Traversal
# 2019.7.12:
我的思路:
这题以前做过,做一个回忆。一个很棒的解法就是使用队列,如果有root,root入队,出队第一个值,把这个root的左右节点(如果有)入队,直到队列为空,出来的就是广度遍历的结果。
from pythonds import Queue class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: q = Queue() q.enqueue(root) alist = [] while q.size() > 0 : node = q.dequeue() alist.append(node) if node.left: q.enqueue(node.left) if node.right: q.enqueue(node.right)
return alist
我的答案:
可是leetcode这题无法引入外置库,而且返回的是list[list[int]] ,所以我们设一个列表为cur用于记录当前层,另一个列表next用于记录下一层,每层迭代一直往下。
# 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[List[int]]: res = [] if root: cur = [root] while cur: res.append([i.val for i in cur]) next = [] for i in cur: if i.left: next.append(i.left) if i.right: next.append(i.right) cur = next return res