在二进制搜索树中打印最大深度

时间:2013-10-04 22:21:47

标签: python python-2.7

我正在尝试获取二叉搜索树的最大深度,但我相信树计算错误。

我的代码:

    def BST_maxdepth(root):
        curdepth = [1]
        maxdepth = [1]
        if root is None:
            return -1
        else:
            curdepth[0] = 1
            maxdepth[0] = 1
            if root.left is not None or root.right is not None:
                curdepth[0] += 1
                if curdepth[0] > maxdepth[0]:
                    maxdepth[0] = curdepth[0]
                BST_maxdepth(root.left)
                BST_maxdepth(root.right)
        return maxdepth[0]
课程& BST:

class Node:
    def __init__(self,value):
        self.right = None
        self.left = None
        self.value = value


def BST_Insert(root, node):     # root --> root of tree or subtree!
    if root.value is None:
        root = node             # beginning of tree
    else:
        if root.value > node.value:     # go to left
            if root.left is None:
                root.left = node
            else:
                BST_Insert(root.left, node)

        if root.value < node.value:    # go to right
            if root.right is None:
                root.right = node
            else:
                BST_Insert(root.right, node)

测试:

r = Node(8)


a = Node(5)
b = Node(2)
c = Node(1)
d = Node(3)
e = Node(7)

输出:

2

预期产出:

4

4 个答案:

答案 0 :(得分:4)

为什么不喜欢......

def BST_maxdepth(root, depth=0):
    if root is None:
        return depth
    return max(BST_maxdepth(root.left, depth+1),
               BST_maxdepth(root.right, depth+1))

答案 1 :(得分:1)

您没有多次更新maxdepth。也许是这样的:

left_depth = BST_maxdepth(root.left)
right_depth = BST_maxdepth(root.right)
maxdepth[0] = max(left_depth, right_depth) + 1

答案 2 :(得分:1)

当你递归时,你没有随身携带curdepthmaxdepth,而且他们不是全球性的。 每次致电BST_maxdepth时,您都会声明一个新的curdepthmaxdepth

这意味着无论树的深度如何,maxdepth只会是2(如果根没有子节点,则为1)。

您可以尝试使用累加器,或者从每个递归调用中返回一个值并以此方式构建maxdepth

答案 3 :(得分:1)

每个递归步骤中的maxdepth未传递给父步骤。

来自

的信息
BST_maxdepth(root.left)
BST_maxdepth(root.right)
需要将

返回给父母。

您正在搜索的每个级别重新实例化它们:

 curdepth = [1]
 maxdepth = [1]