Recursion 查找二叉搜索树从根到特定键的距离

Recursion 查找二叉搜索树从根到特定键的距离,recursion,binary-search-tree,depth,Recursion,Binary Search Tree,Depth,嗨,我正在尝试使用递归编码,通过查找根到“key”参数中给定的特定节点的距离。但是我只能在函数中输入两个参数,这是我的BST的根,也是我想要找到的键。是否可以只指定“键”并遍历BST并在函数中找到“键” 这是我代码的第二部分 print(“Depth:,bst.distance(root,“I”))该距离等于查找关键节点所需的深度。 您必须在每个级别增加1,但前提是该级别包含密钥 类树: 定义初始化(自): self.left=无 self.right=无 self.data=None def距

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

这是我代码的第二部分


print(“Depth:,bst.distance(root,“I”))
该距离等于查找关键节点所需的深度。 您必须在每个级别增加1,但前提是该级别包含密钥

类树:
定义初始化(自):
self.left=无
self.right=无
self.data=None
def距离(根、键):
如果root为None:
返回-1
如果root.data是键:#它是键
返回0
其他:
dl=距离(根、左、键)
dr=距离(根、右、键)
如果dl!=-1:
返回1+dl
艾利夫博士-1:
返回1+dr
否则:#两者都是-1
返回-1
对于测试:

root=Tree()
root.data=“1”
root.left=Tree()
root.left.data=“2”
root.right=Tree()
root.right.data=“3”
root.left.left=树()
root.right.left=树()
root.left.right=树()
root.right.right=树()
root.left.left.data=“4”
root.left.right.data=“5”
root.right.left.data=“6”
root.right.right.data=“7”
距离(根,“1”)
距离(根,“2”)
距离(根,“3”)
距离(根,“4”)
结果:

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

你能给出一个已经构建的树并显示预期的输出与你得到的输出吗?
distance
是节点对象的函数吗?如果是这样,我们可以使用对象来存储信息,而不是通过参数传递信息。
>>> distance(root, "1")
0
>>> distance(root, "2")
1
>>> distance(root, "3")
1
>>> distance(root, "4")
2
>>> distance(root, "7")
2
>>> distance(root, "8")
-1