🥈Medium

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。
示例
二叉树:[3,9,20,null,null,15,7],

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

返回其层次遍历结果:

  1. [
  2. [3],
  3. [9,20],
  4. [15,7]
  5. ]

题解

就是广度优先遍历(BFS),写就可以了。找到了一个直观的示意图:
2elr5.gif

JavaScript

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[][]}
  11. */
  12. var levelOrder = function(root) {
  13. let ans=[]
  14. if (!root){
  15. return ans
  16. }
  17. let deque=[root]
  18. while(deque.length){
  19. let temp=[]
  20. let leng=deque.length
  21. for(let i=0;i<leng;i++){
  22. let node = deque.shift()
  23. temp.push(node.val)
  24. if (node.left!== null){
  25. deque.push(node.left)
  26. }
  27. if (node.right!==null){
  28. deque.push(node.right)
  29. }
  30. }
  31. ans.push(temp)
  32. }
  33. return ans
  34. };

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[List[int]]:
        ans=[]
        if not root:
            return ans
        queue = [root] // 要理解这里的queue是每一层的队列,遍历整一层,输出值,然后将左右子树(下一层)加入队列
        while len(queue):
            temp=[]
            length=len(queue)
            for i in range(length):
                node=queue.pop(0)
                temp.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            ans.append(temp)
        return ans