python - 如何找到二叉树中特定节点的深度?
问题描述
我正在尝试找出解决此问题的递归解决方案。主要是返回节点所在的二叉树中的级别。
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 在树中的级别。(2级)
3
/ \
7 1 <------ return that 7 is at level 2
/ \
9 3
解决方案
递归是一种函数式遗产,因此将其与函数式风格一起使用会产生最佳结果 -
- 基本情况:如果输入
tree
为空,我们无法搜索,返回None
结果 - 归纳,输入不
tree
为空。如果匹配搜索,返回当前深度,tree.data
value
d
- 归纳,输入不
tree
为空tree.data
且不匹配。返回的递归结果或递归结果tree.left
find.right
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
你也可以在你的类中实现该find
方法tree
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
推荐阅读
- c# - 如何避免在我的 DataGridComboBoxColumn 中 CommitEdit 停止编辑其他列?
- php - 如何使用 OpenliteSpeed 服务器通过 wordpress 中的 php 脚本重定向 pdf GET 请求
- google-cloud-platform - 如果用户在组织级别具有访问权限,是否有办法限制用户访问某些 GCP 服务?
- python - 在 tkinter 应用程序中如何以及在哪里最好地存储程序和用户设置以及用户生成的数据?
- c++ - 为什么下面的表达式结果为真,专门要求C++
- javascript - Jest Test - 自定义匹配器
- java - 为什么 HTTPServletRequest 可以通过 CDI 注入,但 HTTPServletResponse 不能?
- c# - 如何使对象可访问?
- c# - 基于 System.Text.Json 的另一个属性动态忽略写入对象的属性
- python - __str__ 返回非字符串(NoneType 类型)并从数据库中删除数据