python如果否则返回混乱,leetcode 669

python如果否则返回混乱,leetcode 669,python,python-3.x,if-statement,return,Python,Python 3.x,If Statement,Return,Leetcode 669。https://leetcode.com/problems/trim-a-binary-search-tree/ 输入:根=[1,0,2],低=1,高=2。 编辑:根是一个以列表形式表示的树结构。 此代码出现错误: “非类型”对象没有属性“val” 如果不是root将返回,因此任何通过它的内容都不应该是None,它具有val def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:

Leetcode 669。https://leetcode.com/problems/trim-a-binary-search-tree/ 输入:根=[1,0,2],低=1,高=2。 编辑:根是一个以列表形式表示的树结构。 此代码出现错误:

“非类型”对象没有属性“val”

如果不是root
将返回,因此任何通过它的内容都不应该是
None
,它具有
val

def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:
    def dfs(root):
        if not root:
            return None
        if root.val < low:         
            root = dfs(root.right)
        if root.val > high:
            root = dfs(root.left)  
        if root.val >= low and root.val <= high:
            root.left = dfs(root.left)
            root.right = dfs(root.right)
        return root            
    return dfs(root)
def-trimBST(self,root:TreeNode,low:int,high:int)->TreeNode:
def dfs(根目录):
如果不是根目录:
一无所获
如果root.val<低:
root=dfs(root.right)
如果root.val>高:
root=dfs(root.left)
如果root.val>=低和root.val树节点:
def dfs(根目录):
如果不是根目录:
一无所获
elif root.val<低:#或如果root.val<低
root=dfs(root.right)
elif root.val>高:
root=dfs(root.left)
其他:
root.left=dfs(root.left)
root.right=dfs(root.right)
返回根
返回dfs(根目录)

我不明白为什么第一个不起作用。我认为
if
s是互斥的,因此它将在第一个
if
中或通过最后三个中的任何一个到达返回点。

假设
不是
None
。然后将执行以下行:


如果满足第一个条件,则不会计算第二个条件,因为它位于
elif
分支中。因此,即使
dfs(root.right)
返回
None
,条件
root.val>high
也不会被评估。

我不理解您的代码,如果
root
是一个列表,它如何具有
val
属性?请发一封信。
def trimBST(self, root: TreeNode, low: int, high: int) -> TreeNode:
    def dfs(root):
        if not root:
            return None
        elif root.val < low:            # OR if root.val < low
            root = dfs(root.right)
        elif root.val > high:
            root = dfs(root.left)  
        else:
            root.left = dfs(root.left)
            root.right = dfs(root.right)
        return root            
    return dfs(root)
if root.val < low:         
    root = dfs(root.right)
if root.val > high:
elif root.val < low:
    root = dfs(root.right)
elif root.val > high: