数据结构——二叉排序树

在这里插入图片描述

二叉排序树(BST)

也称为二叉查找树。二叉排序树或者为空树,或者为非空树,当为非空树时,满足(递归定义):

  1. 若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字;
  2. 若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字;
  3. 左子树、右子树本身也分别是一棵二叉排序树。

组织内存索引

  • 二叉排序树是适用于内存储器的一种重要树形索引(常用红黑树、伸展树等以维持平衡)
  • 外存常用B/B+数

中序遍历序列:1、2、3、4、5、7、8、10、16(依次递增)

左子树结点值 < < <根结点值 < < <右子树结点值

二叉排序树中序遍历序列是一个递增有序序列

查找

  1. 二叉树非空时,查找根结点,若相等则查找成功;
  2. 若不等,则当小于根结点值时,查找左子树;当大于根结点值时,查找右子树;
  3. 当查找到叶子结点仍没找到相应的值,则查找失败。
BSTNode *BST_Search(BiTree T, ElemType key, BSNode *&p){		// 指针引用
    p=NULL;
    while(T!=NULL && key!=T->data){
        p=T;
        if(key<T->data)
            T=T->lchild;
        else
            T=T->rchild;
    }
    return T;
}

插入

  1. 若二叉排序树为空,则直接插入结点;
  2. 若二叉排序树非空,当值小于根结点时,插入左子树;当值大于根结点时,插入右子树;当值等于根节点时,不进行插入。
int BST_Insert(BiTree &T, KeyType k){
    if(T==NULL){
        T=(BiTree) malloc(sizeof(BSTNode));
        T->key=k;
        T->lchild=T->rchild=NULL;
        return 1;
    }
    else if(k==T->key)
        return 0;
    else if(k<T->key)
        return BST_Insert(T->lchild,k);
    else
        return BST_Insert(T->rchild,k);
}

构造

  1. 读入一个元素并建立结点,若二叉树为空将其作为根结点;
  2. 若二叉排序树非空,当值小于根结点时,插入左子树;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值