Python刷leetcode--102.二叉树的层序遍历

一般来说 数据结构 左面都是头,右面都是尾。新增操作也一般在右面。 [在右侧操作 ]

二叉树的层次遍历 [普通]

import collections


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def levelOrder(self, root):
        # def levelOrder(self, root: TreeNode) -> List[List[int]]
        # 一、广度优先
        # 二、深入的时候+1  深度加一
        def generate_next_nodes(node, que):
            if node.left is not None:
                que.append(node.left)
            if node.right is not None:
                que.append(node.right)

        def bfs(a):
            que = collections.deque()
            que.append(a)
            while que:
                node = que.popleft()  # 先弹出来处理一下
                print(node.val)  # 弹出来的时候才会打印值或者处理
                generate_next_nodes(node, que)  # 他失效了不能让他的孩子也失效。存下来

        bfs(root)


# leetcode submit region end(Prohibit modification and deletion)


if __name__ == '__main__':
    sol = Solution()
    node1 = TreeNode(1)
    node2 = TreeNode(2)
    node3 = TreeNode(3)
    node4 = TreeNode(4)
    node5 = TreeNode(5)
    node1.left = node2
    node1.right = node3
    node3.left = node4
    node3.right = node5
    sol.levelOrder(node1)

题解

import collections


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def levelOrder(self, root):
        # def levelOrder(self, root: TreeNode) -> List[List[int]]
        # 一、广度优先
        # 二、深入的时候+1  深度加一
        if root is None:
            return []
        def generate_next_nodes(node, que):
            if node.left is not None:
                que.append(node.left)
            if node.right is not None:
                que.append(node.right)

        def bfs(a):
            que = collections.deque()
            que.append(a)
            res = []
            while que:
                current_level = []
                for _ in range(len(que)):
                    node = que.popleft()  # 先弹出来处理一下
                    current_level.append(node.val)  # 弹出来的时候才会打印值或者处理
                    generate_next_nodes(node, que)  # 他失效了不能让他的孩子也失效。存下来
                res.append(current_level)
            return res

        return bfs(root)

  • 弹出来的时候才会打印值或者处理 [processing]
  • 在这时候他工作完成了,但是要把孩子节点留下来。访问完这层还得用。所以保持顺序的状态加入队列
  • 注意每层结束的时候,准备弹出的时候,其实队列的长度极为,每一层要弹出的个数
扩展一个知识点

python里面的判断条件,只要不是None、0、False都可以是true

©️2020 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值