深度和高度的不同代码-二进制搜索树(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