二叉查找树的查找和插入

常用的查找算法

倒排索引

  • 次关键码
  • 记录号表

二叉排序树,又称为二叉查找数,它或者是一棵空树,或者是具有下列性质的二叉树。

  • 若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值
  • 若它的右子树为空,则右子树上所有节点的值均大于它的根节点的值

二叉查找树的插入

  • 定义

typedef struct BiTNode{

int data;
struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;  
  • 插入使用递归的方式找到最合适的地方

typedef bool Status; // 1.T为二叉链表 2.key为要查找的关键字 3.f指向T的双亲。当T为根节点的时候,f的初值是NULL 4.p 为查找成功后可以查找节点的位置 Status searchBST(BiTree T, int key,BiTree f,BiTree*p){

if (!T) {   //如果查找不成功
    *p = f;
    return false;
}else if (key == T->data){
    *p = T;
    return true;
}else if (key< T->data){
    return  searchBST(T->lchild, key, T, p);
}else if (key> T->data){
    return  searchBST(T->rchild, key, T, p);
}
return  true;}
  • 二叉查找树 基于查找的基础上 进行插入

//二叉树的插入操作 1. 先去查找有没有 2.没有的话,则先创建一个节点,分别为节点赋值。然后判断插入节点和当前节点的关系。 Status insertBST(BiTree *T,int key){

// f为T的双亲节点。p为当前节点
BiTree s ,p ;
if (!searchBST(*T, key, NULL, &p)) { 
    s = (BiTree)malloc(sizeof(BiTNode));
    s->data = key;
    s->lchild = s->rchild = NULL;
    if (!p) {
        *T  =s ;
    }else if (key<p->data){
        p->lchild = s;
    }else if (key>p->data){
        p->rchild = s;
        
    }
    return  true;
}
return  false;}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,952评论 1 31
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,592评论 0 25
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 9,813评论 1 5
  • 1 概述 二叉搜索树,顾名思义,其主要目的用于搜索,它是二叉树结构中最基本的一种数据结构,是后续理解B树、B+树、...
    CodingTech阅读 8,298评论 5 35
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 11,717评论 5 14

友情链接更多精彩内容