python - 如何使用 DFS 在这里工作的这个 python 代码以获得最大深度?
问题描述
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def max_depth(root):
return root and 1 + max(max_depth(root.left), max_depth(root.right)) or 0
if __name__ =="__main__":
def build_tree(nodes):
val = next(nodes)
if not val or val == 'x': return
cur = Node(int(val))
cur.left = build_tree(nodes)
cur.right = build_tree(nodes)
return cur
root = build_tree(iter(input().split()))
print(max_depth(root))
这里给出了正确的答案。但我不明白max_depth函数是如何在这里工作的。更具体地说,这里的“与”和“或”操作。
解决方案
这个表达式:
root and 1 + max(max_depth(root.left), max_depth(root.right)) or 0
相当于:
1 + max(max_depth(root.left), max_depth(root.right)) if root else 0
这是因为and
当第一个操作数为假时将返回第一个操作数,如果第一个操作数为真则返回第二个操作数。操作数将在其为真时返回其第一个操作数,在or
第一个操作数为假时返回其第二个操作数。
return
您还可以使用单独的语句将其写得更详细:
if root:
return 1 + max(max_depth(root.left), max_depth(root.right))
else:
return 0
推荐阅读
- javascript - 有没有办法在 package.json 中对依赖项进行分组?
- javascript - 当我激活作为对话框的删除按钮时,页面中出现水平滚动
- java - 检测长度为零
- c# - .NET Core Identity 和 IdentityServer4 在一个项目中
- php - 如何获取文件对象 laravel
- ios - 如何为 PencilKit 创建 .drawing 文件?
- java - tomcat如何调用@requestMapping注解
- r - 如何将多行列转换为长格式 R data.table
- amazon-web-services - AWS S3 对象删除问题
- mongodb - 如何使用 mongo-go-driver 编组/解组具有多态结构的 bson 数组