【问题标题】:Finding the distance of a binary search tree from the root to a specific key查找二叉搜索树从根到特定键的距离
【发布时间】:2020-06-27 12:52:05
【问题描述】:
def distance(self, rootOfTree, key):

    if rootOfTree is None:

        return -1

    totalDist = -1

    if rootOfTree.key is key:
        return totalDist + 1

    else:
        totalDist = self.distance(rootOfTree.left, key)

        if totalDist >= 0:

            return totalDist + 1

        totalDist = self.distance(rootOfTree.right, key)

        if totalDist >= 0:

            return totalDist + 1

    return totalDist

您好,我正在尝试通过查找从根到“key”参数中给出的特定节点的距离来使用递归进行编码。但我只能设法在函数中输入两个参数,这是我的 BST 的根和我想要找到的键。是否可以只指定“键”并遍历BST并在函数中找到“键”

这是我的代码的第二部分

print("Depth:", bst.distance(root, "I"))

【问题讨论】:

  • 您能否给出一个已经构建的树并显示预期输出与您得到的输出?
  • distance 是来自节点对象的函数吗?如果是这样,我们可以使用对象来存储信息,而不是通过参数传递。

标签: recursion binary-search-tree depth


【解决方案1】:

距离等于你为了找到关键节点而需要追寻的深度。 您必须在每个级别中增加一个,但前提是该级别包含密钥。

class Tree:
    def __init__(self):
        self.left = None
        self.right = None
        self.data = None

def distance(root, key):
    if root is None:
        return -1
    if root.data is key: # it's the key
        return 0
    else:
        dl = distance(root.left, key)
        dr = distance(root.right, key)
        if dl != -1:
           return 1 + dl
        elif dr != -1:
           return 1 + dr
        else: # both are -1
           return -1

用于测试:

root = Tree()
root.data = "1"
root.left = Tree()
root.left.data = "2"
root.right = Tree()
root.right.data = "3"

root.left.left = Tree()
root.right.left = Tree()
root.left.right = Tree()
root.right.right = Tree()
root.left.left.data = "4"
root.left.right.data = "5"
root.right.left.data = "6"
root.right.right.data = "7"

distance(root, "1")
distance(root, "2")
distance(root, "3")
distance(root, "4")

结果:

>>> distance(root, "1")
0
>>> distance(root, "2")
1
>>> distance(root, "3")
1
>>> distance(root, "4")
2
>>> distance(root, "7")
2
>>> distance(root, "8")
-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2016-06-07
    • 2021-01-01
    • 2012-06-05
    • 2011-03-10
    相关资源
    最近更新 更多