Я считаю, что в вашем коде много ошибок, из-за которых будет сложно отследить:
**** Во-первых: любое определение или функция внутри любого класса Python должны быть в нижнем регистре с подчеркиванием, чтобы мы могли выяснить, что такое класс из функции, поэтому ваш FindPath () должен быть >>>>>> find_path ()
**** Второе: если вы хотите объявить какие-либо аргументы глобальной области видимости класса, вы должны сделать это внутри функции как конструктор или инициализатор, поэтому ваш код для E.G должен быть:
class Solution:
def __init__(self, root, expect_number):
self.root = root
self.expect_number = expect_number
и каждый раз, когда вы будете вызывать любой аргумент внутри класса, вы должны вызывать его с помощью (self.arg), например, self.root
**** Третье: эта строка вообще не понятна:
def find(root,path,path_sum):
isleaf= root.left==None and root.right==None
это совершенно неверно: вы присваиваете isleaf значение None заранее заданному значению, и вы снова присваиваете переменной isleaf слово (и) так, в качестве логической или питонической логики: как будет понимать isleaf, чтобы получить два Значения (root.left и root.right), которые получают значения None, не имеют никакого смысла.
поэтому, пожалуйста, дайте нам представление о том, что именно вы хотите сделать здесь.
**** Четвертое: рассмотрим один пробел после и перед любым оператором, вместо
"если путь_сумма
**** Не бойтесь давать переменным или аргументам реальные имена, чтобы различать реальные потребности в них, или, по крайней мере, пытаться дать комментарий к ним, например: что делает t = [] !!!!!!!
Поэтому, пожалуйста, постарайтесь быть более конкретным, чтобы вы могли найти хорошую помощь для ваших проблем и сделать ваш код более питоническим.
Новое редактирование:
В решении № 2: каждый раз, когда вы вызываете функцию find (), вы добавляете или добавляете значение 'root' в список путей
def find(root,path,path_sum):
isleaf= root.left==None and root.right==None
path.append(root) # here you added the root to the path
и код все еще рекурсивный, пока это условие не станет ложным:
if path_sum<expectNumber:
и когда оно ложно, он начнет вызывать метод pop (), который удалит
последний «корень», добавленный в список путей:
path.pop()
и затем он вызывает следующую строку, которая снова вызовет функцию поиска
find(root,path,path_sum)
но на этот раз он будет вызываться с пустым значением пути, ПОЧЕМУ?
потому что первый объект списка путей "path = []" находится на том же уровне области, что и
вызов последней функции поиска "find (root, path, path_sum)"
таким образом, аргумент внутреннего пути и его значения не видны областью внешнего пути, они видны только функцией find () самостоятельно.
И эта область выдает то же самое для «Решения 1», за исключением того, что вы передаете список путей с корневым значением, и когда это условие ложно
if path_sum<expectNumber:
код снова вызовет функцию find (), но путь будет иметь только корневое значение в первом объявлении "path = [root]".
И, в конце концов, я думаю, что с уважением вы не делились всем кодом для защиты конфиденциальности, поэтому трудно найти ответ легко.