leetcode-107 二叉树的层次遍历

leetcode-107 二叉树的层次遍历

1. 二叉树的层次遍历,即通过使用队列的方法(可用数组代替),每次存储某一层的所有节点,然后在一个for循环中遍历该节点,将所有节点的子节点入队,并记录下所有节点的值,将他们堆入栈中。

2. example

lc107.png

  • 根节点入队 cur=[3],res=[[3]]
  • 遍历cur,通过中间变量next存储第二层所有节点,再将所有节点值堆入栈中,用next中元素覆盖cur,next=[9,20],cur=[9,20],res=[[3],[9,20]]
  • 遍历cur,通过中间变量next存储第三层所有节点,再将所有节点值堆入栈中,用next中元素覆盖cur,next=[15,7],cur=[15,7],res=[[3],[9,20],[15,7]]
  • 遍历cur,通过中间变量next存储第四层所有节点,再将所有节点值堆入栈中,用next中元素覆盖cur,next=[],cur=[],res=[[3],[9,20],[15,7]]

3. code

class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return []
        cur=[root]
        stack=[[root.val]]
        while cur:
            next=[]
            val=[]
            for i in cur:
                if i.left:
                    next.append(i.left)
                if i.right:
                    next.append(i.right)
            cur=next
            for j in next:
                val.append(j.val)
            if val:
                stack.append(val)
        return stack[::-1]
posted @ 2021-10-16 10:33  流光之中  阅读(22)  评论(0编辑  收藏  举报