我了解如何使用递归插入。我也明白为什么这段代码不能按预期工作,因为当我在“插入”方法中更新变量“当前”时,我只是将名称标签“当前”附加到某个节点,将该节点复制到“ current”并修改“current”,但不是二叉搜索树中的实际节点。
那么我如何使用这里的迭代概念实际修改二叉搜索树中的节点?更一般地说,我怎样才能对我创建的任何对象进行“浅拷贝”并实际修改该对象? Python 中的“列表”对象是具有所需属性的示例。 “列表”中的什么代码使它以这种方式运行?提前致谢。
class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
class BinarySearchTree:
def __init__(self, root=None):
self.root = root
def insert(self, data):
if self.root:
current = self.root
while current:
if data < current.data:
current = current.left
elif data > current.data:
current = current.right
current = Node(data)
else:
self.root = Node(data)
bst = BinarySearchTree()
bst.insert(2)
bst.insert(1)
bst.insert(3)
我认为您正在寻找类似以下代码片段的内容。
如果您需要澄清,请告诉我。
class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
class BinarySearchTree:
def __init__(self, root=None):
self.root = Node(root) if root else None
def insert(self, data):
if data < self.data:
if not self.left:
self.left = Node(data=data)
else:
BinarySearchTree.insert(self=self.left, data=data)
return True
elif data > self.data:
if not self.right:
self.right = Node(data=data)
else:
BinarySearchTree.insert(self=self.right, data=data)
return True
else:
print(f"Node with data {data} already inserted")
bst = BinarySearchTree(root=15)
BinarySearchTree.insert(self=bst.root, data=2)
BinarySearchTree.insert(self=bst.root, data=1)
BinarySearchTree.insert(self=bst.root, data=3)
print("root : ", bst.root.data)
print("root left : ", bst.root.left.data)
print("root left left : ", bst.root.left.left.data)
print("root left right: ", bst.root.left.right.data)