【问题标题】:How to find max depth of n-ary tree using bfs?如何使用 bfs 找到 n 叉树的最大深度?
【发布时间】:2018-09-05 04:38:26
【问题描述】:

这是我的节点定义:

class Node(object):
    def __init__(self, val, children):
        self.val = val
        self.children = children

现在我必须在树中找到最大深度。我使用广度优先搜索来标记每个节点的级别,然后返回最大级别。

这是我的代码:

def maxDepth(self, root):
    """
    :type root: Node
    :rtype: int
    """
    if(root == None):
        return 0

    q = []
    q.append(root)

    level={root.val:1}

    while(len(q)>0):

        s = q.pop(0)

        for c in s.children:
            q.append(c)
            level[c.val]=level[s.val]+1

    return max(level.values())

它在某些情况下有效,但在许多情况下给出了错误的答案。我不明白我在哪里错过了这个概念?

【问题讨论】:

  • 你可以给出一个你得到错误答案的案例。
  • 实际上我是在 leetcode 上提交代码,所以不能告诉你输入,但我得到了错误的答案,所以我的方法一定有问题
  • 好的,可能有很多情况。如果某些节点共享一个相同的值,您的解决方案将得到错误的答案,因为您使用该值作为节点的键。
  • @pfctgeorge 是的,你是对的!谢谢
  • 这是一个不会让你记录每个节点深度的算法:stackoverflow.com/questions/15013956/…

标签: python algorithm tree graph-theory breadth-first-search


【解决方案1】:

正如@pfctgeorge 所建议的,我根据节点值附加级别,但是可以有多个节点具有相同的值,因为它是一棵树,在这种情况下它会给出错误的答案。

【讨论】:

    【解决方案2】:

    既然您知道哪里出错了,您可以执行以下操作来实现树的最大深度-

    伪代码:

    q = []
    q.offer(root)
    level = 1
    
    while q.isEmpty() == false:
    
        size = q.size()
        for i = 0 to size:
            curr_node = q.poll()
            for each_child in curr_node:
                q.offer(each_child)
    
        level = level + 1
    
    return level
    

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2021-09-19
      • 2019-09-08
      • 2016-01-24
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多