二叉查找树的Python实现

 二叉查找树,即左孩子小于根节点,右孩子大于根节点。
对于每一次新的节点插入操作,依据这个规则进行插入,最终使得树的最右端为最大值,最左端为最小值。
由于二叉查找树是进入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)    
'''
为什么返回值是空呢?
递归调用的返回值问题
'''    

猜你喜欢

转载自blog.csdn.net/yeshankuangrenaaaaa/article/details/84789627
今日推荐