深度和高度的不同代码-二进制搜索树(Python)
我很困惑,二叉搜索树中深度和高度的代码有什么不同? 我在谷歌上搜索了深度代码和高度代码。 结果是一样的 有人能告诉我区别吗? 无论如何,下面是我的高度和深度代码。 但我的深度不起作用深度和高度的不同代码-二进制搜索树(Python),python,Python,我很困惑,二叉搜索树中深度和高度的代码有什么不同? 我在谷歌上搜索了深度代码和高度代码。 结果是一样的 有人能告诉我区别吗? 无论如何,下面是我的高度和深度代码。 但我的深度不起作用 def height(self,key): node = self.root while node is not None: if node.key == key: return self.height2(node) elif node.key
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。另一方面,高度是从节点到根的最长路径,即树中任何节点的最大深度 您的代码似乎工作正常,
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
类节点(对象):
def uuu init uuuu(self,key):
self.key=key
self.left=无
self.right=无
定义深度(根、键、当前深度=0):
如果不是根目录:
返回-1
elif root.key==键:
回流深度
elif key
深度是与树中单个节点关联的值,它是从一个节点到根节点的边数。根节点的深度为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
类节点(对象):
def uuu init uuuu(self,key):
self.key=key
self.left=无
self.right=无
定义深度(根、键、当前深度=0):
如果不是根目录:
返回-1
elif root.key==键:
回流深度
elif key
确定高度时,只需扫描整个树,而无需检查节点的值。这正是在height2
中发生的事情。确定节点的深度需要先找到它。这意味着我的深度代码是错误的?是的,它根本没有检查值/键。在当前形式下,代码不会运行,它返回的是节点的值,而不是深度:return temp.val
实际上,我甚至不能运行代码,因为它声明需要3个参数,但是4是给定的当你确定高度时,你可以只扫描整个树而不检查节点的值。这正是在height2
中发生的事情。确定节点的深度需要先找到它。这意味着我的深度代码是错误的?是的,它根本没有检查值/键。在当前形式下,代码不会运行,它返回的是节点的值,而不是深度:return temp.val
实际上,我甚至不能运行代码,因为它声明需要3个参数,但给出了4