Как рекурсия сохраняет значения функций в python? - PullRequest
0 голосов
/ 25 января 2019

Я нахожусь на пути изучения структур данных и столкнулся с проблемой, которая связана с Python и рекурсией.

У меня есть функция (ниже - update_BST), и в одной версии кода нетоставьте правильное значение из рекурсии.

Я предоставляю две версии фрагмента кода.Спасибо

"""
Given a Binary Search Tree (BST), 
modify it so that all greater values in 
the given BST are added to every node. 
For example, consider the following BST.
              50
           /      \\
         30        70
        /   \      /  \\
      20    40    60   80 

The above tree should be modified to following 

              260
           /      \\
         330        150
        /   \       /  \\
      350   300    210   80
"""

class Node:
    def __init__(self, data):
        self.data = data
        self.right = None
        self.left = None

    def insert(self, data):
        if self.data == data:
            return False
        elif self.data > data:
            if self.left:
                self.left.insert(data)
            else:
                self.left = Node(data)
        else:
            if self.right:
                self.right.insert(data)
            else:
                self.right = Node(data)

    def in_order(self):
        if self:
            if self.left:
                self.left.in_order()
            print(self.data)
            if self.right:
                self.right.in_order()

class BST:
    def __init__(self):
        self.root = None

    def insert(self, data):
        if self.root:
            self.root.insert(data)
        else:
            self.root = Node(data)
            return True

    def in_order(self):
        if self.root is not None:
            self.root.in_order()

bst = BST()
arr = [50, 30, 20, 40, 70, 60, 80]
for i in arr:
    bst.insert(i)


def update_BST(node, temp):

    if node == None:
        return

    update_BST(node.right, temp)
    temp[0] = temp[0] + node.data
    node.data = temp[0]
    update_BST(node.left, temp)   

update_BST(bst.root, [0])

bst.in_order()

Этот код работает так, как он должен работать.Он возвращает правильные значения.

НО, я не понимаю, почему он не работает, если я использую - 0 - вместо - [0] - и, конечно, модифицируя код повторного анализанапример:

def update_BST(node, temp):

    if node == None:
        return

    update_BST(node.right, temp)
    temp = temp + node.data
    node.data = temp
    update_BST(node.left, temp)   

update_BST(bst.root, 0)

Итак, вопрос в том, почему мне нужно использовать [0] - почему простое целое число 0 не работает?

...