zoukankan      html  css  js  c++  java
  • 107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II

    题意

    给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。

    解题思路

    1. 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中;

    2. 迭代:使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换;

    实现

    class Solution(object):
       def levelOrderBottom(self, root):
           """
          :type root: TreeNode
          :rtype: List[List[int]]
          """
           if not root:
               return []

           # 使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换
           # 致于为什么要使用队列,是因为需要题目要求结点的顺序是从左到右,也就是先加入的要先取出,这是队列的特性;
           cur_level, tmp_level, result = [root], [], [[]]
           while cur_level:
               cur = cur_level.pop(0)
               result[0].append(cur.val)
               # 替代队列加入下一层的结点
               if cur.left:
                   tmp_level.append(cur.left)
               if cur.right:
                   tmp_level.append(cur.right)
               # 是否需要添加新的一层
               if not cur_level and tmp_level:
                   cur_level = tmp_level[:]
                   tmp_level = []
                   result.insert(0, [])
           return result

       def levelOrderBottom(self, root):
           """
          递归实现
          :type root: TreeNode
          :rtype: List[List[int]]
          """
           if not root:
               return []

           def helper(node, depth, res):
               """
              利用前序遍历的思想
              """
               if not node:
                   return
               # 超出递归的长度表明是新的一层,则新添加数组
               if depth < 0 and abs(depth) > len(res):
                   res.insert(0, [])
               # 可以理解成每个node都能对应到树的depth
               res[depth].append(node.val)
               if node.left:
                   helper(node.left, depth-1, res)
               if node.right:
                   helper(node.right, depth-1, res)
           
           result = []
           # 从-1开始是为了可以在第一次定位具体子数组的时候使用
           helper(root, -1, result)
           return result
  • 相关阅读:
    (一)七种AOP实现方法
    构造函数中base与this的区别
    第三章----CSS样式表综合整理
    第二章-----Html标签——综合整理
    第四章——JavaScript简单语法
    第一章---零基础闯荡IT界
    【matlab】读写文件
    icp算法基本思想
    KD-tree
    【MRPT】【icp-slam-live】Vs2013+ cmake3.6.1 + mrpt1.4.0+opencv2.9.4+wxWidget3.0.2环境配置
  • 原文地址:https://www.cnblogs.com/George1994/p/10605155.html
Copyright © 2011-2022 走看看