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