Python 查找二叉搜索树最深和的函数
我试图在python中创建一个函数,但我根本不想更改BST类来实现这一点。该函数用于查找根到具有最高深度的节点的路径之和。如果有多个节点具有相同的深度,我将查找最大深度和并返回它 到目前为止我得到了什么(使用基本的BST类) 类BTNode(对象): 在尝试了一段时间的算法来解决这个问题后,我想出了上面的几个方法,但都失败了,我不知道如何编写代码 算法: 我认为这是可行的: 我们从根开始。(我认为基本情况应该是每当我们击中一片叶子时,比如在一个节点中没有子节点,所以没有左或右子节点,以及当有左无右,或者有右无左) 我先检查左子树,得到它的深度,我们也可以用和来称它为深度。然后我检查正确的子树,我们称之为深度,然后得到它的深度及其总和 第二个条件是检查它们是否相等,如果相等,那么很容易,我们只取两个深度的最大和。否则,我们将看到谁拥有最高的深度,并试图得到它的总和 现在是我不知道该怎么做的时候了 1:我从来没有学过可选参数,所以在尝试这个练习时,我试图避免这种情况,但我认为我做不到,我真的很感激有人能给我展示一些很酷的助手函数 2:这不是右边或左边的总和,而是我需要的路径。想到一种方法来获得正确的路径有点让人困惑 (以下是我使用上述算法的新尝试): 粘在我提到的零件上。举个例子:Python 查找二叉搜索树最深和的函数,python,algorithm,Python,Algorithm,我试图在python中创建一个函数,但我根本不想更改BST类来实现这一点。该函数用于查找根到具有最高深度的节点的路径之和。如果有多个节点具有相同的深度,我将查找最大深度和并返回它 到目前为止我得到了什么(使用基本的BST类) 类BTNode(对象): 在尝试了一段时间的算法来解决这个问题后,我想出了上面的几个方法,但都失败了,我不知道如何编写代码 算法: 我认为这是可行的: 我们从根开始。(我认为基本情况应该是每当我们击中一片叶子时,比如在一个节点中没有子节点,所以没有左或右子节点,以及当有左无
>>> BST(8, BST(7, BST(10), BST(11)), BST(6, BST(11), BST(9, None, BST(14)))
37 (depth 3 is the highest so 8 + 6 + 9 + 14 is the path)
对不起,我把BST忘了,它是一个二叉树而不是BST
我知道我的函数会给出一个元组,但我总是可以制作一个帮助函数来修复这个问题,我只是觉得跟踪节点会更容易 如果函数不需要是
BTNode
的方法,则可以大大简化实现。然后,您可以跟踪深度和总和,遍历叶并返回当前深度和总和。此外,如果返回(深度,总和)
元组,则可以使用max
直接将它们相互比较:
class BTNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def deepest_sum(node, depth=0, current=0):
# Base case
if not node:
return (depth, current)
depth += 1
current += node.data
return max(deepest_sum(node.left, depth, current),
deepest_sum(node.right, depth, current))
tree = BTNode(8, BTNode(7, BTNode(10), BTNode(11)), BTNode(6, BTNode(11), BTNode(9, None, BTNode(14))))
print(deepest_sum(tree))
输出:
(4, 37)
class BTNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def deepest_sum(node, depth=0, current=0):
# Base case
if not node:
return (depth, current)
depth += 1
current += node.data
return max(deepest_sum(node.left, depth, current),
deepest_sum(node.right, depth, current))
tree = BTNode(8, BTNode(7, BTNode(10), BTNode(11)), BTNode(6, BTNode(11), BTNode(9, None, BTNode(14))))
print(deepest_sum(tree))
(4, 37)