Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有最大不同节点的根到叶路径_Python_C++_Recursion_Binary Tree - Fatal编程技术网

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

Python 具有最大不同节点的根到叶路径,python,c++,recursion,binary-tree,Python,C++,Recursion,Binary Tree,我最近正在研究以下问题。基本上,您会得到一个二叉树,需要找到具有最多不同值的路径。上面的链接鼓励使用散列,但我不确定散列在这种情况下会有什么帮助。该条规定如下: 一个简单的解决方案是探索所有根到叶的路径。根深柢固 要创建叶路径,请计数不同的节点,最后返回最大值 伯爵 一个有效的解决方案是使用哈希。我们递归地遍历 树并维护从根到当前路径上不同节点的计数 节点。我们重复左、右子树,最后返回最大值 有两种价值 我不确定散列方法在这种情况下如何更好地工作(因为我不懂c++,所以我很难看到)。有人能帮我把

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

一个简单的解决方案是探索所有根到叶的路径。根深柢固 要创建叶路径,请计数不同的节点,最后返回最大值 伯爵

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

我不确定散列方法在这种情况下如何更好地工作(因为我不懂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++,可能需要无序的映射对象,但是字典对Python没有帮助。最好递归地获取每个分支的最大深度,只计算尚未遇到标签的分支。为了跟踪以前看到过哪些标签,我会使用列表或字典,检查每个叶子的成员资格。希望这对你有用。

这很公平。我不明白的是字典有什么帮助?当这个函数开始运行时,它看起来如何?我理解一个简单的解决方案,即为每个路径创建一个带有节点值的列表,计算长度,然后取所有这些路径的最大值。另一方面,hash/dictionary方法没有意义,因为我觉得它没有区分不同的路径/分支(根到叶)。