递归如何将函数值保留在python中?

时间:2019-01-25 18:02:13

标签: python recursion data-structures

我正在学习数据结构,并且面临与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不起作用?

0 个答案:

没有答案