如何在这里使用DFS为最大深度编写python代码?

如何在这里使用DFS为最大深度编写python代码?,python,depth-first-search,Python,Depth First Search,在这里,它给出了正确的答案。但是我不明白max\u depth函数在这里是如何工作的。更具体地说,这里的“and”和“or”操作。和用于检查根目录是否不是None。这就像是在做: 0,如果root不是1+max(max_depth(root.left)、max_depth(root.right)) 和用于检查根目录是否不是None。这就像是在做: 0,如果root不是1+max(max_depth(root.left)、max_depth(root.right)) 此表达式: class Nod

在这里,它给出了正确的答案。但是我不明白max\u depth函数在这里是如何工作的。更具体地说,这里的“and”和“or”操作。

用于检查根目录是否不是
None
。这就像是在做:

0,如果root不是1+max(max_depth(root.left)、max_depth(root.right))

用于检查根目录是否不是
None
。这就像是在做:

0,如果root不是1+max(max_depth(root.left)、max_depth(root.right))
此表达式:

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))
相当于:

root and 1 + max(max_depth(root.left), max_depth(root.right)) or 0
这是因为当第一个操作数为falsy时,
将返回第一个操作数,如果第一个操作数为truthy,则返回第二个操作数。
操作数在truthy时返回第一个操作数,在falsy时返回第二个操作数

您还可以使用单独的
return
语句编写更详细的内容:

1 + max(max_depth(root.left), max_depth(root.right)) if root else 0
这句话:

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))
相当于:

root and 1 + max(max_depth(root.left), max_depth(root.right)) or 0
这是因为当第一个操作数为falsy时,
将返回第一个操作数,如果第一个操作数为truthy,则返回第二个操作数。
操作数在truthy时返回第一个操作数,在falsy时返回第二个操作数

您还可以使用单独的
return
语句编写更详细的内容:

1 + max(max_depth(root.left), max_depth(root.right)) if root else 0

你对它了解多少?你对它了解多少?这肯定是一个更好的答案。尼斯:)这绝对是一个更好的答案。尼斯:)