#python #python-3.x #recursion #tree
#python #python-3.x #рекурсия #дерево
Вопрос:
Я решаю эту проблему в Leetcode. Проблема в следующем: учитывая двоичное дерево, представьте, что вы стоите на правой стороне от него, возвращайте значения узлов, которые вы видите, упорядоченные сверху вниз. (Примечание: я не прошу помощи в логике решения этого алгоритма. Я просто спрашиваю о коде, который я написал, когда решал эту проблему.)
Мой вопрос в том, почему мой код работает, когда он написан так:
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
def helper(node, level, output):
if level == len(output):
output.append(node.val)
if node.right:
helper(node.right, level 1, output)
if node.left:
helper(node.left, level 1, output)
return output
if not root:
return []
else:
return helper(root, 0, [])
но не так:
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
def helper(node, level, output):
if level == len(output):
output.append(node.val)
if node.right:
return helper(node.right, level 1, output)
if node.left:
return helper(node.left, level 1, output)
return output
if not root:
return []
else:
return helper(root, 0, [])
Я в замешательстве, потому что в других рекурсивных функциях кажется, что мне всегда приходится писать return
.
Комментарии:
1. Потому
helper
что мутируетoutput
, который затем возвращается внешним методом. Вы не можете вернуться раньше, дваif
условия не являются взаимоисключающими (обаnode.left
иnode.right
могут быть истинными).2. Вероятно, это потому, что python передает массивы как адреса вместо копий, что позволяет
helper
функции обновлять содержимоеoutput
без необходимости возвращать его каждый раз.3. @jonrsharpe, ах да, теперь я это вижу. Спасибо.