python实现二叉搜索树_Python实现二叉搜索树BST的方法示例

二叉排序树(BST)又称二叉查找树、二叉搜索树

二叉排序树(Binary Sort Tree)又称二叉查找树。它或者是一棵空树;或者是具有下列性质的二叉树:

1.若左子树不空,则左子树上所有结点的值均小于根结点的值;

2.若右子树不空,则右子树上所有结点的值均大于根节点的值;

3.左、右子树也分别为二叉排序树。

求树深度

按序输出节点值(使用中序遍历)

查询二叉搜索树中一个具有给点关键字的结点,返回该节点的位置。时间复杂度是O(h),h是树的高度。

递归/迭代求最大关键字元素

递归/迭代求最小关键字元素

# -*- coding:utf-8 -*-

'''

用Python实现二叉搜索树。

'''

class Node():

def __init__(self, x):

self.val = x

self.left = None

self.right = None

#求树的深度

def depth(root):

if root is None:

return 0

else:

return 1 + max(depth(root.left), depth(root.right))

#按序输出结点值(中序遍历)

def input_in_order(root):

if root is None:

return

input_in_order(root.left)

print(root.val)

input_in_order(root.right)

#(递归实现 、迭代实现)查询二叉搜索树中一个具有给点关键字的结点,返回该节点的位置。时间复杂度是O(h),h是树的高度。

#递归实现

def search1(root, value):

if root is None or root.val == value:

return root

if root.val > value:

return search1(root.left, value)

if root.val < value:

return search1(root.right, value)

#迭代实现

def search2(root, value):

while root != None and root.val != value:

if root.val > value:

root = root.left

elif root.val < value:

root = root.right

return root

#求最大关键字元素

#迭代实现

def max_value1(root):

while root != None and root.left != None:

root = root.right

if root is None:

return root

else:

return root.val

#递归实现

def max_value2(root):

if root == None:

return root

elif root.right == None:

return root.val

else:

return max_value2(root.right)

#求最小关键字元素

#递归实现

def min_value1(root):

if root is None:

return root

elif root.left is None:

return root.val

else:

return min_value1(root.left)

#迭代实现

def min_value2(root):

if root is None:

return root

while root.left !=None:

root = root.left

return root.val

if __name__ == '__main__':

a = Node(15)

b = Node(6)

c = Node(18)

d = Node(4)

e = Node(8)

f = Node(17)

g = Node(20)

h = Node(13)

i = Node(9)

a.left = b

a.right = c

b.left = d

b.right = e

c.left = f

c.right = g

e.right = h

h.left = i

print(search1(a, 13))

print(search2(a,13))

print(max_value1(a))

print(max_value2(a))

print(min_value1(a))

print(min_value2(a))

ps:从二叉查找树BST中查找元素X,返回其所在结点的地址,查找的次数取决于树的高度。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-07-28

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python实现二叉搜索树的代码示例: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None class BST: def __init__(self): self.root = None def insert(self, val): if not self.root: self.root = TreeNode(val) return curr = self.root while curr: if val < curr.val: if not curr.left: curr.left = TreeNode(val) return curr = curr.left else: if not curr.right: curr.right = TreeNode(val) return curr = curr.right def search(self, val): curr = self.root while curr: if curr.val == val: return True elif curr.val > val: curr = curr.left else: curr = curr.right return False def delete(self, val): def find_min(node): while node.left: node = node.left return node def delete_node(node, val): if not node: return None if node.val == val: if not node.left and not node.right: return None if not node.left: return node.right if not node.right: return node.left min_node = find_min(node.right) node.val = min_node.val node.right = delete_node(node.right, min_node.val) elif node.val > val: node.left = delete_node(node.left, val) else: node.right = delete_node(node.right, val) return node self.root = delete_node(self.root, val) ``` 以上代码实现二叉搜索树的插入、查找和删除操作。其中,插入操作按照二叉搜索树的规则插入节点,查找操作也是按照二叉搜索树的规则进行查找,删除操作则需要考虑三种情况:被删除节点没有子节点、被删除节点只有一个子节点、被删除节点有两个子节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值