查找树ADT

本文介绍了二叉查找树(也称二叉排序树)的基本概念,包括如何初始化、查找、找到最小元和最大元,以及如何进行插入操作。二叉查找树的特性使得沿根节点向左能找到最小元,向右能找到最大元。文章通过示例展示了插入操作的尾递归和循环实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树

#定义

二叉排序树或者是一棵空树,或者是具有下列性质的 二叉树
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的 根结 点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;

#实现

#定义

#ifdef _Tree_H

struct TreeNode;
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree;

SearchTree MakeEmpty( SearchTree T );
Position Find( Element X, SearchTree T);
Position FindMin( SearchTree T );
Position FindMax( SearchTree T );
SearchTree Insert( ElementType X, SearchTree T );
SearchTree Delete( ElementType X, SearchTree T );
ElementType Retrieve( Position P );

#endif // _Tree_H


struct TreeNode
{
    ElementType Element;
    SearchTree Left;
    SearchTree Right;
};

1)MakeEmpty

用于初始化

SearchTree
MakeEmpty( SearchTree T )
{
    if( T!=Null )
    {
        MakeEmpty( T->Left );
        MakeEmpty( T->Right );
        free( T );
    }
    return 0;
}

2)Find

返回指向树T中具有关键字X的节点的指针,若不存在,返回NULL。

Position
Find( ElementType X, SearchTree T )
{
    if( T == NULL )
        return NULL;
    if( X < T->Element )
        return Find( X, T->Left );
    else
    if( X > T->Element )
        return Find( X, T->Right );
    else
        return T;
}

3)FindMin和FindMax

返回树中最小元和最大元的位置。

由定义不难猜到,由根节点一路向左,能得到最小元;一路向右能得到最大元。

实现的方法由两种:尾递归和循环,下边分别用两个函数做演示:

Position
FindMin(SearchTree T)            //递归实现
{
    if( T == NULL )
        return NULL;
    else 
    if( T->Left == NULL )
        return T;
    else
        return FindMin( T->Left );
}

Position
FindMax( SearchTree T )            //循环实现
{
    if( T != NULL )
        while( T-> Right != NULL)
            T = T->Right;
    return T;
}

4)Insert

插入操作。为了将X插入树T中,可以像Find那样沿着树查找。如果找到X则什么都不用做。否则,将X插入到遍历路径的最后一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值