Python 中的二叉搜索树实现详解

二叉搜索树是一种特殊的二叉树,其左子树中的所有值均小于根节点,而右子树中的所有值均大于根节点的值。在这篇文章中,我们将深入探讨如何在 Python 中实现二叉搜索树。

什么是二叉搜索树 (BST)?

二叉搜索树 是计算机科学中用于按排序方式组织和存储数据的一种数据结构。二叉搜索树中的每个节点最多有两个子节点,即 子节点和 子节点。

BST 的性质

  • 节点的左侧仅包含比该节点值小的值。
  • 节点的右侧仅包含比该节点值大的值。
  • 左侧和右侧都遵循相同的规则,从而形成更小的二叉搜索树。

!image二叉搜索树

在这个二叉树中

  • 根节点: 8
  • 左子树 (3): 值均 < 8
  • 右子树 (10): 值均 > 8
  • 每个子树都维护相对于各自根节点的相同规则。

在 Python 中创建二叉搜索树 (BST)

下面是创建二叉搜索树 (BST) 的步骤。

  • 创建一个 Tree 类
  • 在参数化构造函数中,我们有一个默认参数 val = None
  • 当在没有任何参数的情况下实例化 Tree 类时,它会创建一个带有左右指针的空节点
  • 如果我们在实例化时传递了值,它会创建一个具有该值的节点,并且左右指针被创建为 None 类型。

Python


CODEBLOCK_c7121957

时间复杂度: O(1)
空间复杂度: O(1)

二叉搜索树 (BST) 的基本操作

以下是 Python 中二叉搜索树 (BST) 的一些基本操作。

Python 中的二叉搜索树 (BST) 插入操作

在二叉搜索树中插入节点涉及向树中添加一个新节点,同时要维护二叉搜索树 (BST) 的性质。因此,我们需要遍历所有节点,直到找到一个叶节点,并根据该叶节点的值将该节点作为左子节点或右子节点插入。因此,我们需要在叶节点检查的三个条件如下:

图示说明

> 让我们将 13 插入到下面的二叉搜索树中

>

>

> !Untitled-Diagramdrawio-(1).png)二叉搜索树

>

>

> – 当我们调用 insert 方法时,13 会与根节点 15 进行比较,由于 13 < 15,我们需要将 13 插入到左子树中。所以我们递归调用 leftsubtree.insert(13)

> – 现在 15 的左子节点是 10,所以将 13 与 10 进行比较,由于 13 > 10,我们需要将 13 插入到右子树中。所以我们递归调用 rightsubtree.insert(13)

> – 这里,10 的右子节点是 11,所以将 13 与 11 进行比较,由于 13 > 11,我们需要将 13 插入到 11 的右子节点。再次递归调用 rightsubtree.insert(13)

> – 在这个递归调用中,我们发现没有节点了,这意味着我们到达了叶节点,所以我们创建一个节点并将数据插入其中

>

> 插入 13 后,BST 看起来像这样:

>

>

> !Untitled-Diagramdrawio-(2).png)在二叉搜索树中插入了 13 节点

在 Python 中实现二叉搜索树 (BST) 的插入

Python


Python program to demonstrate

insert operation in binary search tree

class Node:

def init(self, key):

self.left = None

self.right = None

self.val = key

A utility function to insert

a new node with the given key

def insert(root, key):

if root is None:

return Node(key)

if root.val == key:

return root

if root.val < key:

root.right = insert(root.right, key)

else:

root.left = insert(root.left, key)

return root

A utility function to do inorder tree traversal

def inorder(root):

if root:

inorder(root.left)

print(root.val, end=" ")

inorder(root.right)

r = Node(15)

r = insert(r, 10)

r = insert(r, 18)

r = insert(r, 4)

r = insert(r, 11)

r = insert(r, 16)

r = insert(r, 20)

r = i

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/37896.html
点赞
0.00 平均评分 (0% 分数) - 0