【问题标题】:Root to leaf path with maximum distinct nodes具有最大不同节点的根到叶路径
【发布时间】:2023-03-12 11:17:01
【问题描述】:

我最近正在研究以下问题here。基本上,你得到一棵二叉树,需要找到具有最多不同值的路径。上面的链接鼓励使用散列,但我不确定散列在这种情况下会有什么帮助。文章中声明如下:

一个简单的解决方案是探索所有从根到叶的路径。在每一个根 到叶路径,计算不同的节点,最后返回最大值 数。

一个有效的解决方案是使用散列。我们递归遍历 树并维护从根到当前路径上不同节点的计数 节点。我们递归左子树和右子树,最后返回最大值 两个值。

我不确定哈希方法在这种情况下如何更好地工作(我很难看到,因为我不懂 c++)。谁能帮我将散列方法翻译成python?我在这里设置了一棵树:

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


root = TreeNode('A')

second = TreeNode('Z')
root.left = second

third = TreeNode('D')
second.left = third

fourth = TreeNode('A')
third.left = fourth

tenth = TreeNode('A')
third.right = tenth

fifth = TreeNode('A')
root.right = fifth

sixth = TreeNode('U')
fifth.left = sixth

seventh = TreeNode('Z')
fifth.right = seventh

eighth = TreeNode('Y')
seventh.right = eighth

nineth = TreeNode('B')
seventh.right = nineth

看起来像

        A
       / \
      Z   A
     /   / \
    D   U   Z
   / \       \
  A   A       Y

感谢任何帮助。谢谢。

【问题讨论】:

    标签: python c++ recursion binary-tree


    【解决方案1】:

    我不想在这里输入确切的 python 答案,因为那样对你的学习过程更好,但我可以给你一个提示。首先,您的构造函数看起来是正确的。 unordered_map 对象类似于字典。对于 C++,可能需要一个 unordered_map 对象,但字典对 Python 没有多大帮助。您最好递归地获取每个分支的最大深度,只计算尚未遇到标签的那些。为了跟踪以前看到过哪些标签,我会使用列表或字典并检查每个叶子的成员资格。希望对你有用。

    【讨论】:

    • 这很公平。我不明白的是字典如何帮助?当这个函数开始运行时它看起来如何?我理解一个简单的解决方案,您可以为每个路径创建一个包含节点值的列表,评估长度,然后取所有这些路径的最大值。另一方面,哈希/字典方法没有意义,因为我觉得它没有区分各种路径/分支(从根到叶)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多