前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Q107 Binary Tree Level Order Traversal II

Q107 Binary Tree Level Order Traversal II

作者头像
echobingo
发布2018-04-25 16:50:09
3750
发布2018-04-25 16:50:09
举报

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
代码语言:javascript
复制
Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7

return its bottom-up level order traversal as:
[
  [15,7],
  [9,20],
  [3]
]
解题思路:

此题需要记录两个关键值。一个是当前结点所位于的层数,因为它决定了返回列表的深度;另一个是每一层结点的地址,通过地址可以得到当前结点的值。因此,可以想到用广度搜索 + 模拟队列实现。

Pyhon实现:
代码语言:javascript
复制
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrderBottom(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if root == None:
            return []
        rlist = [] # 返回列表
        queue = [] # 模拟队列
        level = 1  # 结点所在层数
        queue.append((root, level))  # 队列的每一个元素存储的是结点地址以及该节点所在层数
        while queue:  # 当队列非空
            node, level = queue.pop(0)  # 从队列中取出一个元素,注意 pop(0),如果没有0则是从后面取数,而不是队列的操作
            if node != None:  # 如果结点地址不为空
                if len(rlist) < level:  # 如果返回列表的个数小于当前结点的层数,则需要增加一个新列表
                    rlist.insert(0, [])
                rlist[0].append(node.val) # 因为新增的列表插入的位置总是在第一个,所以使用 rlist[0]
                # 把当前结点的左右孩子的地址以及左右孩子所在的层数加入到新的队列中
                queue.append((node.left, level + 1))  
                queue.append((node.right, level + 1))
        return rlist
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • For example:
  • 解题思路:
  • Pyhon实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档