Python:实际修改二叉搜索树中的节点,而不仅仅是附加标签名称

问题描述 投票:0回答:1

我了解如何使用递归插入。我也明白为什么这段代码不能按预期工作,因为当我在“插入”方法中更新变量“当前”时,我只是将名称标签“当前”附加到某个节点,将该节点复制到“ 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)
python copy binary-search-tree nodes shallow-copy
1个回答
0
投票

我认为您正在寻找类似以下代码片段的内容。

如果您需要澄清,请告诉我。

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)
© www.soinside.com 2019 - 2024. All rights reserved.