Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IndexError:,在这种情况下,如果不定义方法,如何检查列表中的最后一个元素是否为null?_Python_Tree_Stack_Traversal_Indexoutofrangeexception - Fatal编程技术网

Python IndexError:,在这种情况下,如果不定义方法,如何检查列表中的最后一个元素是否为null?

Python IndexError:,在这种情况下,如果不定义方法,如何检查列表中的最后一个元素是否为null?,python,tree,stack,traversal,indexoutofrangeexception,Python,Tree,Stack,Traversal,Indexoutofrangeexception,这是leet代码问题,因此没有定义树。但这里是TreeNode类的定义:(不适用于我的问题,但无论如何它在这里): 所以,这就是我所做的失败,因为列表为空时无法访问。问题出现在用###表示的行上 错误: IndexError: list index out of range if (check.right != None) & (check.right == stack[-1]): Line 27 in postorderTraversal (Solution.py) ret = Sol

这是leet代码问题,因此没有定义树。但这里是TreeNode类的定义:(不适用于我的问题,但无论如何它在这里):

所以,这就是我所做的失败,因为列表为空时无法访问。问题出现在用###表示的行上

错误:

IndexError: list index out of range
if (check.right != None) & (check.right == stack[-1]):
Line 27 in postorderTraversal (Solution.py)
ret = Solution().postorderTraversal(param_1)
Line 57 in _driver (Solution.py)
_driver()
Line 68 in <module> (Solution.py)

在这种情况下,是否有一种更简单的方法(不创建新方法和更少的代码行)来执行堆栈[-1]检查,而不影响其他条件语句的顺序

通过使用切片获取堆栈的最后一个元素,而不是访问特定索引,可以避免使用
检查堆栈
功能

在这种情况下,如果堆栈中没有元素,您将得到空列表,而不是
None

例如:

stack = [1,2]
stack[-1:] # 2

stack = []
stack[-1:] # []

请将其降低并提高到预期值。显示中间结果与预期结果的偏差。您发布的代码没有合法缩进,也不会引发您暗示的错误,因为没有驾驶程序。是的,我相信您的建议就是我最初所做的(如我的帖子所示)。但是,堆栈正好在'elif stack:'语句之后弹出,因此在某些情况下,堆栈将为空。我不认为有一个简单的解决方案可以在保持总体流程和逻辑的同时重新定位pop语句。@MichaelWell你说得对,我错过了
elif
下的
pop
。我已经更新了我的解决方案。酷!这很有效,我知道切片,但没有想到使用它。谢谢你,加比普!
IndexError: list index out of range
if (check.right != None) & (check.right == stack[-1]):
Line 27 in postorderTraversal (Solution.py)
ret = Solution().postorderTraversal(param_1)
Line 57 in _driver (Solution.py)
_driver()
Line 68 in <module> (Solution.py)
def check_stack(stack):
if stack:
    return stack[-1]
else:
    return None

class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
    stack=[]
    output=[]
    node = root
    while True:
        if node:
            if (node.right != None):
                stack.append(node.right)
            stack.append(node)
            node=node.left
        elif stack:
            check=stack.pop()
            if (check.right != None) & (check.right == check_stack(stack)): #
                node=stack.pop()
                stack.append(check)
            else:
                output.append(check.val)
                node=None
        else:
            break
    return output
stack = [1,2]
stack[-1:] # 2

stack = []
stack[-1:] # []