深度和高度的代码不同 - 二进制搜索树(Python)

时间:2016-03-17 14:34:38

标签: python

我很困惑,二进制搜索树中深度和高度的代码有什么不同? 我做了谷歌检查代码的深度,以及高度的代码。 结果是一样的。

有人可以告诉我这些差异吗? 无论如何,下面是我的身高和深度代码。 但我的深度并没有发挥作用。

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))

1 个答案:

答案 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