二叉查找树,即左孩子小于根节点,右孩子大于根节点。
对于每一次新的节点插入操作,依据这个规则进行插入,最终使得树的最右端为最大值,最左端为最小值。
由于二叉查找树是进入AVL平衡二叉树的学习的前提,因此先进行这个的实现。
可以通过对节点的info属性进行赋值,以作查找验证,直接运行也可以
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 4 14:00:52 2018
Description:二叉查找树的实现
@author: HJY
"""
#二叉树节点类定义
class Node():
def __init__(self,item):
self.right = None
self.left = None
self.item = item
self.info = None
######################################################################
#Function:insert
#Author:HJY
#Description:向二叉搜索树中插入新的节点
#input:
# rNode:树的根节点
# insertNum:需要插入的值
#Return:
#####################################################################
def insert(rNode,insertNum):
if rNode.item < insertNum:
if rNode.right != None:
insert(rNode.right,insertNum)
else:
rNode.right = Node(insertNum)
else:
if rNode.left != None:
insert(rNode.left,insertNum)
else:
rNode.left = Node(insertNum)
######################################################################
#Function:create
#Author:HJY
#Description:根据列表创建二叉搜索树
#input:
# base:列表
#Return: 返回生成的树的根节点
#####################################################################
def create(base):
root = Node(base[0])
for i in range(1,len(base)):
insert(root,base[i])
return root
######################################################################
#Function:query
#Author:HJY
#Description:根据输入的值查找
#input:
# root:树的根节点
# find:查找的值
#Return: 查找到的节点引用
#####################################################################
def query(root,find):
if root.item is find:
print("the result has been found!")
return root
elif root.item < find:
if root.right != None:
return query(root.right,find)
else:
print("can't found!")
return
else:
if root.left != None:
return query(root.left,find)
else:
print("can't found!")
return
######################################################################
#Function:get_max
#Author:HJY
#Description:查找最大值
#input:
# root:树的根节点
#Return: 返回最大值引用
#####################################################################
def get_max(root):
if root.right:
return get_max(root.right)
else:
return root
######################################################################
#Function:get_min
#Author:HJY
#Description:查找最小值
#input:
# root:树的根节点
#Return: 返回最小值引用
#####################################################################
def get_min(root):
if root.left:
return get_min(root.left)
else:
return root
if __name__ == '__main__':
base = [10,5,7,9,19,11,29,72,63,32,199,9,1]
a = create(base)
op = query(a,19)
print('result:',op.info)
maxNum = get_max(a)
minNum = get_min(a)
print('当前最大值:',maxNum.item)
print('当前最小值:',minNum.item)
'''
为什么返回值是空呢?
递归调用的返回值问题
'''