Самый низкий общий предок бинарного дерева поиска - PullRequest
0 голосов
/ 17 апреля 2020

Я понимаю алгоритм итеративного подхода к нахождению LCA BST. Но я не понимаю строку ниже, выделенную жирным шрифтом. Может ли кто-нибудь объяснить мне?

def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        while (root.val - p.val) * (root.val - q.val) > 0:
            root = (root.left, root.right)[p.val > root.val]
        return root

1 Ответ

1 голос
/ 17 апреля 2020

Как я понимаю, вам нужно объяснение этой строки.

root = (root.left, root.right)[p.val > root.val]

Он создает кортеж с двумя элементами: root .left и root .right, они имеют индексы 0 и 1. p. val> root .val - логическое выражение. Если false (для python это 0), он выбирает root .left (например, первый элемент в кортеже). если это правда (для python это 1), выбирается root .right (например, второй элемент в кортеже).

Это потому, что

>>> False == 0
True
>>> True == 1
True
...