Python 如何在二叉树中找到特定节点的深度?
我正试图找出这个问题的递归解决方案。主要是返回二叉树中节点所在的级别Python 如何在二叉树中找到特定节点的深度?,python,recursion,binary-tree,Python,Recursion,Binary Tree,我正试图找出这个问题的递归解决方案。主要是返回二叉树中节点所在的级别 def find_depth(tree, node): if node == None: return 0 else: return max(find_depth(tree.left)) #recursive solution here 将此类用于值: class Tree: def __init__(self, value, left=None,
def find_depth(tree, node):
if node == None:
return 0
else:
return max(find_depth(tree.left))
#recursive solution here
将此类用于值:
class Tree:
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
示例:调用find_depth(tree,7)
应返回树中7所在的级别。(二级)
3
/ \
7.1也许这就是你要找的
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
call中提供有关深度的信息。它可能是这样的(假设0
是一个哨兵,通知找不到节点):
def find_depth(树,节点,深度=1):
如果节点==无:
返回0
如果tree.value==节点:
返回深度
left\u depth=查找深度(tree.left,node,depth+1)
right\u depth=查找深度(tree.right,node,depth+1)
返回最大值(左深、右深)
然后用两个参数调用它:x=find_depth(tree,7)
递归是一种函数遗产,因此将其与函数样式一起使用会产生最佳结果-
基本情况:如果输入树
为空,我们无法搜索,返回无
结果
归纳,输入树
不是空的。如果tree.data
与搜索值匹配,则返回当前深度d
归纳,输入的树
不是空的,并且树。数据
不匹配。返回tree.left的递归结果
或find.right的递归结果
def find(t=None,value=None,d=1):
如果不是t:
返回无#1
elif t.value==值:
返回d#2
其他:
返回find(t.left,value,d+1)或find(t.right,value,d+1)#3
类树:
定义初始化(self,value,左=无,右=无):
自我价值=价值
self.left=左
self.right=right
t=树\
( 3
,树(7,树(9),树(3))
,树(1)
)
打印(查找(t,7))#2
打印(查找(t,99))#无
您也可以在树中实现find
方法
def find(t=None,value=None,d=1):
# ...
类树
定义初始化。。。
def查找(自我,值)
返回查找(self,value)
打印(t.find(7))#2
打印(t.find(99))#无
如何在树中搜索节点?使用相同的逻辑。如果必须进一步深入节点,则返回1+recursivefunction(),如果找到节点,则返回0。您缺少向树中添加子节点的功能。在当前状态下,类树仅附加到第一个级别,因为您没有向子级添加任何级别。提示:深度录制可能还需要一个参数。当在子树中找不到节点时,应该返回一些特殊的内容。
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