python - 在二叉搜索树中添加一个节点
问题描述
我目前正在实现 a但我在创建函数Binary search tree
时遇到了问题。add_node()
我试图以递归的方式制作它,但结果很奇怪。
例如 - 如果我运行add_node(1)
、add_node(5)
和add_node(0)
,我的树只有 1,没有 5 和 0。
如果你告诉我问题是什么,我会很高兴。
def add_node(self, value: int) -> None:
if self.root == None:
self.root = Node(value)
return
else:
return self.add_recursion(self.root, value)
def add_recursion(self, node: Node, value: int) -> None:
if node == None:
node = Node(value)
return
elif value < node.value:
return self.add_recursion(node.left, value)
else:
return self.add_recursion(node.right, value)
解决方案
问题是您如何处理是否node.left
存在node.right
。由于每次调用都会复制参数,因此设置 in 的值node
对add_recursion
树没有影响。
def foo(val):
print("foo start:", val)
val = 5
print("foo end:", val)
bar = 3
foo(bar) # Value of bar is copied for call
print("after foo:", bar) # Prints bar is still 3
我认为您可能还会因为根节点的处理方式而感到困惑。这是一些关于如何处理对add_recursive
.
class Node:
def __init__(self, value: int):
self.value = value
self.left = None
self.right = None
def add_recursive(self, value: int):
# TODO: recursively add to left or right
# For example, here is how you could recursively make a linked list
if self.right is None:
self.right = Node(value)
else:
self.right.add_recursive(value)
class BinarySearchTree:
def __init__(self):
self.root = None
def add_node(self, value: int):
if self.root is None:
self.root = Node(value)
else:
# Call add_recursive on root instead of with root.
self.root.add_recursive(value)
tree = BinarySearchTree()
tree.add_node(1)
tree.add_node(5)
tree.add_node(0)
推荐阅读
- node.js - Mongoose - 链接到相同类型的嵌套子文档
- javascript - JavaScript,通过自定义数据 ID 查找子 DIV
- c# - 生成时对 Prefab 的文本 GameObject 引用
- networking - DCHP 地址对我的代码是否透明?
- java - 如何为android绑定多个不同的服务?
- wordpress - 如何仅为单页添加 WordPress 后退按钮
- c# - 为什么安全规则不适用于 Firebase-Unity 中的特定用户?
- c++ - 使用 C++ fmtlib,有没有比使用 std::ostringstream 更简洁的方法将数据序列附加到字符串?
- javascript - 如何在 javascript 中向我的网址添加“&”
- python - 在 Python 脚本中使用 'jdbc' 为 Spark DataFrame 'write' 加载 JDBC 驱动程序