[英]How can I find the depth of a specific node inside a binary tree?
我正在尝试找出解决此问题的递归解决方案。 主要是返回节点所在的二叉树中的级别。
def find_depth(tree, node):
if node == None:
return 0
else:
return max(find_depth(tree.left))
#recursive solution here
使用此 class 作为值:
class Tree:
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
示例:调用find_depth(tree, 7)
应该返回 7 在树中的级别。 (2级)
3
/ \
7 1 <------ return that 7 is at level 2
/ \
9 3
也许这就是你要找的
def find_depth(tree, node):
if node is None or tree is None:
return 0
if tree == node:
return 1
left = find_depth(tree.left, node)
if left != 0:
return 1 + left
right = find_depth(tree.right, node)
if right != 0:
return 1 + right
return 0
您需要在find_depth
调用中提供有关深度的信息。 它可能看起来像这样(假设0
是通知未找到节点的哨兵):
def find_depth(tree, node, depth=1):
if node == None:
return 0
if tree.value == node:
return depth
left_depth = find_depth(tree.left, node, depth+1)
right_depth = find_depth(tree.right, node, depth+1)
return max(left_depth, right_depth)
然后你用两个参数调用它: x = find_depth(tree, 7)
。
递归是一种函数式遗产,因此将其与函数式风格一起使用会产生最佳结果 -
tree
为空,我们无法搜索,返回None
结果tree
不为空。 如果tree.data
与搜索value
匹配,则返回当前深度, d
tree
不为空且tree.data
不匹配。 返回find.right
的递归结果或tree.left
的递归结果def find (t = None, value = None, d = 1):
if not t:
return None # 1
elif t.value == value:
return d # 2
else:
return find(t.left, value, d + 1) or find(t.right, value, d + 1) # 3
class tree:
def __init__(self, value, left = None, right = None):
self.value = value
self.left = left
self.right = right
t = tree \
( 3
, tree(7, tree(9), tree(3))
, tree(1)
)
print(find(t, 7)) # 2
print(find(t, 99)) # None
您也可以在tree
class 中实现find
方法
def find (t = None, value = None, d = 1):
# ...
class tree
def __init__ #...
def find(self, value)
return find(self, value)
print(t.find(7)) # 2
print(t.find(99)) # None
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.