Оператор while со стеком в Inorder Traversal - PullRequest
0 голосов
/ 22 октября 2019

Когда я хочу сохранить все узлы в списке порядка sorted_node_val, я использую оператор while.

    def closestKValues(self, root, target, k):
        # write your code here
        stack = []
        sorted_node_val = []
        node = root
        while node:
            stack.append(node)
            node = node.left

        while stack is not None:
            node = stack.pop()
            sorted_node_val.append(node.val)
            if node.right:
                node = node.right
                while node:
                    stack.append(node)
                    node = node.left

Однако приведенный выше код выдает ошибку с while stack is not None:, и результат равен

  File "/Users/Python/901.py", line 35, in closestKValues
    node = stack.pop()

IndexError: pop from empty list

Я изменил оператор while на while stack: и исправил эту ошибку. Но мне интересно, в чем разница между while stack is not None: и while stack:

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Вы можете проверить это условие, запустив IDE Python и создав пустой массив. Затем с пустым массивом выполните проверку условия:

temp = []
temp is None

Вывод False.

Это говорит нам о том, что пустой массив не считается None, что имеет смысл, посколькумассив не имеет нулевого типа.

0 голосов
/ 22 октября 2019

В самом конце вашего стека, stack = []. Это список длиной 0, а не объект none. Вы можете проверить это, попробовав None == [], что будет False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...