bfs遍历二叉树的性能

时间:2019-04-23 10:57:36

标签: python algorithm

我正在练习问题Binary Tree Level Order Traversal - LeetCode

  

给出一棵二叉树,返回其节点值的级别顺序遍历。 (即,从左到右,逐级)。

     

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

     
 3
/ \
9  20
 /  \
15   7
     

将其级别顺序遍历返回为:

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

BFS解决方案

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

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        from collections import deque 
        if root == None: return []
        queue = deque([root])
        res = []
        step = -1
        while queue:
            step += 1
            size = len(queue)
            if len(res) < step + 1:
                res.append([])

            for _ in range(size):
                cur = queue.popleft()
                res[step].append(cur.val)
                #stretch 
                if cur.left:
                    queue.append(cur.left)
                if cur.right: 
                    queue.append(cur.right)
        return res

乙炔

  

运行时间:44毫秒,比进行二进制树级订单遍历的Python3在线提交的75.27%快。

     

内存使用量:13.4 MB,不到进行二进制树级顺序遍历的Python3在线提交的5.64%。

请注意麻烦的检查:

            if len(res) < step + 1:
                res.append([])

删除条件检查后为

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        from collections import deque 
        if root == None: return []
        queue = deque([root])
        res = []
        step = -1
        while queue:
            step += 1
            size = len(queue)
           # if len(res) < step + 1: #remove the condition checking 
           res.append([])

            for _ in range(size):
                cur = queue.popleft()
                res[step].append(cur.val)
                #stretch 
                if cur.left:
                    queue.append(cur.left)
                if cur.right: 
                    queue.append(cur.right)
        return res

性能更改为

  

运行时间:56毫秒,比进行二进制树级订单遍历的Python3在线提交的19.04%快。

     

内存使用量:13.5 MB,不到进行二进制树级顺序遍历的Python3在线提交的4.52%。

从逻辑上讲,它们具有相同的性能,为什么要报告如此大的差异?

0 个答案:

没有答案