我正在尝试获取二叉搜索树的最大深度,但我相信树计算错误。
我的代码:
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
答案 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)
当你递归时,你没有随身携带curdepth
和maxdepth
,而且他们不是全球性的。
每次致电BST_maxdepth
时,您都会声明一个新的curdepth
和maxdepth
。
这意味着无论树的深度如何,maxdepth
只会是2(如果根没有子节点,则为1)。
您可以尝试使用累加器,或者从每个递归调用中返回一个值并以此方式构建maxdepth
。
答案 3 :(得分:1)
每个递归步骤中的maxdepth
未传递给父步骤。
来自
的信息BST_maxdepth(root.left)
BST_maxdepth(root.right)
需要将返回给父母。
您正在搜索的每个级别重新实例化它们:
curdepth = [1]
maxdepth = [1]