• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

107. Binary Tree Level Order Traversal II(二叉树分层排序)

leetcode admin 8个月前 (03-25) 392次浏览 0个评论 扫描二维码

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:
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]
]

解法

# 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: TreeNode) -> List[List[int]]:
        
        
        if not root:
            return []
        
        _result=collections.defaultdict(list)
        
        #广度遍历 BFS  
        
        def _bfs(root,level,_result):
            
  
            queue = [[root,1]]
            while len(queue) > 0:
              
                temp,level = queue.pop(0)
                _result[level].append(temp.val)
                if temp.left:
                    queue.append([temp.left,level+1])
                if temp.right:
                    queue.append([temp.right,level+1])
        _bfs(root,1,_result)
        result=[]
        for x in sorted(_result.keys(),reverse=True):
            result.append(_result[x])
        return result
        

上面的代码主要是通过队列实现 BFS 的访问,使用 defaultdict 对象保存结果,字典的 key 是对应每一层的编号,value 就是每一层从左到右的排序结果。

 

下面给出的 leetcode 讨论区给出的答案,这个完全会更加易懂,实现思想都是基于 BFS

class Solution(object):
    def levelOrderBottom(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        arr = []
        if root is None:
            return []
        else:
            arr.append(root)
        while True:
            tmp = []
            while len(arr) > 0:
                item = arr.pop(0)
                tmp.append(item)
            res.insert(0, [w.val for w in tmp])
            for item in tmp:
                if item.left is not None:
                    arr.append(item.left)
                if item.right is not None:
                    arr.append(item.right)
            if len(arr) == 0:
                break
        return res

 


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明107. Binary Tree Level Order Traversal II(二叉树分层排序)
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!