python - 递归如何在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 不起作用?
解决方案
推荐阅读
- javascript - 如何在javascript中将文件转换为字节流
- arrays - Swift:数组中有多少相同的对象
- vba - “SELECT ... FROM ... WHERE”中的 AND 语句
- android - 在android webview中将字符串呈现为HTML
- mysql - 查找前两列的总和以及它们有多少分?
- android - 如何在 Android Studio 3.4 中创建没有互联网使用“离线组件”的 gradle 项目
- php - 用于检查会话是否存在的 isset 在 PHP 中不起作用
- react-native - 如何使用 Flatlist 导航到详细信息页面
- anaconda - Anaconda 的 theano 的 cuDNN
- python - Excel 公式重新计算不起作用