二叉搜索树的python实现
本文给出二叉搜索树的python代码实现,关于二叉搜索树的相关知识,任意找一本关于数据结构的树一定会有详细的介绍,我就不说了。下面直接给出相关的python代码实现,包括二叉搜索树的插入,删除和查找节点的完整代码。
- 代码实现
#
# Binary Search Tree
#
class Node(object):
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinarySearchTree(object):
def insert(self, root, node):
if root is None:
return node
if root.data < node.data:
root.right = self.insert(root.right, node)
else:
root.left = self.insert(root.left, node)
return root
def delete(self, root, data):
if root is None:
return root
elif data < root.data:
root.left = self.delete(root.left, data)
elif data > root.data:
root.right = self.delete(root.right, data)
else:
if root.left is None and root.right is None:
root = None
elif root.left is None:
root = root.right
elif root.right is None:
root = root.left
else:
temp = root.right
while temp.left is not None:
temp = temp.left
root.data = temp.data
root.right = self.delete(root.right, temp.data)
return root
def findData(self, root, data):
if root is None:
return False
elif data == root.data:
return True
elif data < root.data:
return self.findData(root.left, data)
else:
return self.findData(root.right, data)
def printTree(self, root):
if not root:
return
else:
self.printTree(root.left)
print(root.data)
self.printTree(root.right)
r = Node(3)
node = BinarySearchTree()
nodelist = [1, 8, 5, 12, 14, 6, 15, 7, 127]
for nde in nodelist:
node.insert(r, Node(nde))
print('---------------BinarySearchTree------------------')
node.printTree(r)
print('--------------------delete-----------------------')
node.delete(r, 14)
node.printTree(r)
print('---------------------find------------------------')
flag = node.findData(r, 14)
if flag:
print('We find the data!')
else:
print('Cannot find the data!')