python - 无法理解这种用于在 Python 中插入值的二叉搜索树 (BST) 算法
问题描述
我正在学习算法。为了让 BST 构造在 BST 中插入一个值,我遇到了这段代码。我不太擅长 OOPS 概念,无法弄清楚 currentnode.left = BST(value) 和 currentnode = currentnode.left 是如何工作的。如果有人可以帮助我理解这一点,那将有很大帮助。
class BST:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(self, value):
currentnode = self
while True:
if value < currentnode.value:
if currentnode.left is None:
currentnode.left = BST(value)
break
else:
currentnode = currentnode.left
else:
if currentnode.right is None:
currentnode.right = BST(value)
break
else:
currentnode = currentnode.right
return self
解决方案
在insert函数中,currentnode已经赋值给self。从 while 循环开始,使用 currentnode 的值检查参数值。如果它很小,则执行第一个条件,否则执行第二个条件。
现在你的疑问来了。假设第一个条件正在执行。如果当前节点的左值为none,则代码调用BST(value),即调用构造函数来启动一个新节点,该新节点又成为当前节点的左孩子。否则,如果已经有一个左孩子,则该孩子成为当前节点,并且一次又一次地迭代 while 循环,直到找到合适的位置。
另外,如果这段代码看起来很复杂。你应该参考这个,以防万一它有帮助。
class Node:
def __init__(self,key):
self.left = None
self.right = None
self.val = key
def insert(root,node):
if root is None:
root = node
else:
if root.val < node.val:
if root.right is None:
root.right = node
else:
insert(root.right, node)
else:
if root.left is None:
root.left = node
else:
insert(root.left, node)
# 5
# / \
# 3 7
# / \ / \
# 2 4 6 8
r = Node(5)
insert(r,Node(3))
insert(r,Node(2))
insert(r,Node(4))
insert(r,Node(7))
insert(r,Node(6))
insert(r,Node(8))
推荐阅读
- c# - System.Net.WebClient 在将 DownloadString 与 Bloomberg Web 服务一起使用时获取 ConnectionReset
- python - 如何循环遍历熊猫数据框并在条件下修改值?
- mendix - 如何在 Mendix 中导入小部件包?
- javascript - 如何让黄瓜在 selenium nightwatch 框架中运行
- r - 如何将函数应用于许多 ML 模型并保存它们的输出?
- c - 如何将 Windows 消息从一个线程传递到另一个线程?
- python - Kivy 应用程序在运行时抛出 context_intructions.so 错误
- java - 如何在我的演示代码中访问以下方法“addPoints()”和“getScores()”
- laravel - Laravel 中实现的 SQL 连接和查询在哪里?
- java - Java比较对象列表以查找重复项并将它们放入新列表中