具有最大不同节点的叶子路径的根

时间:2018-03-13 01:36:25

标签: python c++ recursion binary-tree

我最近在查看以下问题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

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

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