首页 > 解决方案 > 递归如何在python中保留函数值?

问题描述

我正在学习数据结构并面临与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] -- 并且当然修改 reaming 代码,它为什么不起作用:

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 不起作用?

标签: pythonrecursiondata-structures

解决方案


推荐阅读