我目前正在尝试解决一个问题,即我返回树中出现的数字的最大深度。例如,如果树看起来像这样:
public class Factory {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return res;
}
}
我的函数应该返回2.但是,我的函数返回0
// Correct lazy initialization in Java
class Foo {
private static class HelperHolder {
public static final Helper helper = new Helper();
}
public static Helper getHelper() {
return HelperHolder.helper;
}
}
我的思维过程错了吗?如果当前值与我正在寻找的值(参数)匹配,我应该添加 1
/ \
2 3
\
2
,如果它们不匹配,则不添加def max_depth(t,value):
if t == None:
return -1
left = max_depth(t.left, value)
right = max_depth(t.right, value)
if t.value == value:
return 1 + max(left,right)
else:
return max(left,right)
。我使用1
因此它返回左子项或右项的最大值,因此我得到具有更高深度的子项。这是错的吗?
这是树类:
1
这是我对树的构造:
max()
这将打印class TN:
def __init__(self,value,left=None,right=None):
self.value = value
self.left = left
self.right = right
答案 0 :(得分:1)
如果我理解正确,您尝试解决的问题是:树中值value
的最大深度是什么。
您应该在t.value == value
时增加不仅,而且当树的任何后代与您正在寻找的值匹配时。这是因为您正在测量深度。
以下是算法的外观:
def max_depth(t,value):
if t == None:
return -1
left = max_depth(t.left, value)
right = max_depth(t.right, value)
if t.value == value or left > -1 or right > -1: # <<<<
return 1 + max(left,right)
else:
return max(left,right) # This is always -1
答案 1 :(得分:0)
我认为这是max_depth
我们添加了一个额外的参数d
,其默认值为0
。此参数用于跟踪当前深度。在返回答案时,我们仅在d
节点max (d, ...)
匹配时在t
中添加left
- 否则,我们会返回right
和def max_depth (t, value, d = 0):
if t is None:
return -1
elif t.value == value:
return max ( d
, max_depth (t.left, value, d + 1)
, max_depth (t.right, value, d + 1)
)
else:
return max ( max_depth (t.left, value, d + 1)
, max_depth (t.right, value, d + 1)
)
的最大值结果
tree = \
TN (1, TN (2), TN (3, right = TN (2)))
这是您问题代码中的树
print (max_depth (tree, 1))
# 0
print (max_depth (tree, 2))
# 2
print (max_depth (tree, 3))
# 1
找出每个值的最大深度
-1
如果找不到值,将返回print (max_depth (tree, 4))
# -1
<a>