我很困惑,二进制搜索树中深度和高度的代码有什么不同? 我做了谷歌检查代码的深度,以及高度的代码。 结果是一样的。
有人可以告诉我这些差异吗? 无论如何,下面是我的身高和深度代码。 但我的深度并没有发挥作用。
def height(self,key):
node = self.root
while node is not None:
if node.key == key:
return self.height2(node)
elif node.key > key:
node = node.left
else:
node = node.right
def height2(self,n):
if n is None:
return -1
else:
#return the max
return 1 + max(self.height2(n.left),self.height2(n.right))
深度
def depth(self,node):
node = self.root
if node.left == None and node.right == None:
return 1
elif node.left == None:
return node.right.depth() + 1
elif node.right == None:
return node.left.depth() + 1
else:
return 1 + max(self.depth(node.left),self.depth(node.right))
编辑深度:
def depth(self,key):
temp = self.root
while temp is not None:
if temp.key == key:
return temp.val
elif temp.key > key:
temp = temp.left
else:
temp = temp.right
return return 1 + max(self.depth(node.left),self.depth(node.right))
答案 0 :(得分:2)
深度是与树中单个节点关联的值,它是从节点到根节点的边数。根节点的深度为0.另一方面,高度是从节点到根的最长路径,即树中任何节点的最大深度。
您所拥有的代码似乎工作正常,height2
足以确定树的高度。如果您需要确定节点的深度,则需要先找到它。
假设树是BST,那么下面的代码将返回深度,如果密钥不在树中,则返回-1:
class Node(object):
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def depth(root, key, current_depth=0):
if not root:
return -1
elif root.key == key:
return current_depth
elif key < root.key:
return depth(root.left, key, current_depth + 1)
else:
return depth(root.right, key, current_depth + 1)
root = Node(3)
root.left = Node(2)
root.left.left = Node(1)
for i in xrange(1, 4):
print 'key: {0}, depth: {1}'.format(i, depth(root, i))
# key: 1, depth: 2
# key: 2, depth: 1
# key: 3, depth: 0