zoukankan      html  css  js  c++  java
  • LeetCode--102--二叉树的层次遍历(python)

    给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

    例如:
    给定二叉树: [3,9,20,null,null,15,7],

        3
        /
      9 20
      /
    15 7
    返回其层次遍历结果:

    [
    [3],
    [9,20],
    [15,7]
    ]

     1 class Solution:
     2     def levelOrder(self, root: TreeNode) -> List[List[int]]:
     3         levels= []
     4         if not root:
     5             return levels
     6         def helper(node ,level):
     7             if len(levels)==level:
     8                 levels.append([])
     9             levels[level].append(node.val)
    10             if node.left:
    11                 helper(node.left,level+1)
    12             if node.right:
    13                 helper(node.right,level+1)
    14         helper(root,0)
    15         return levels

    来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-ci-bian-li-by-leetcode/

    非递归版本

     1 class Solution:
     2     def levelOrder(self, root: TreeNode) -> List[List[int]]:
     3         if root == None:
     4             return []
     5         queue1 = [root]
     6         queue2 = []
     7         ret = []
     8         while queue1 or queue2:
     9             if queue1:
    10                 tempRet = []
    11                 while queue1:
    12                     tempNode = queue1.pop(0)     
    13                     tempRet.append(tempNode.val)
    14                     if tempNode.left:
    15                         queue2.append(tempNode.left)
    16                     if tempNode.right:
    17                         queue2.append(tempNode.right)
    18                 ret.append(tempRet)
    19             if queue2:
    20                 tempRet = []
    21                 while queue2:
    22                     tempNode = queue2.pop(0)
    23                     tempRet.append(tempNode.val)
    24                     if tempNode.left:
    25                         queue1.append(tempNode.left)
    26                     if tempNode.right:
    27                         queue1.append(tempNode.right)
    28                 ret.append(tempRet)
    29         return ret

    2020-01-13 20:49:45

  • 相关阅读:
    Protected和Default的区别
    将数组中负数放在正数前面
    java.io包和杯子测楼
    hadoop基础
    极限编程和JUnit
    接口和抽象类
    C# 中窗口AutoScaleMode属性
    计算机的自启动管理
    labview中的移位寄存器、循环隧道,自动索引隧道的区别
    发现C#winform编程中不常用的控件(一)<FlowLayoutPanel控件><拆分器控件Splitcontainer >
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/11495511.html
Copyright © 2011-2022 走看看