zoukankan      html  css  js  c++  java
  • 二叉排序树

    这是一个比较有意思的二叉树。也是研究动态查找表一种方法

    动态查找表是在查找一个表(某个数据结构)的过程,不仅仅有查询过程,也有添加,删除的操作。

    二叉排序树(Binary Sort Tree)具有以下性质:
    1.如果他的左子树不空,则左子树上所有结点的值都小于他的根结点的值。
    2.如果他的右子树不空,则右子数上所有结点的值都大于他的根结点的值。
    3.他的左右子树分别也是二叉排序树。

    图示:
    查看更多精彩图片

      二叉排序树又称二叉查找树,根据上述的特点,他的查找过程和次优二叉树类似。查询的时候当树不空的时候,先将判断的值和树的根结点比较,如果相等则查找成功。如果不等根据大小关系,继续在左右子树上进行查询。
      通常使用二叉链表作为二叉排序树的存储结构。
    --------查找算法描述-------------------
    BiTree SearchBST(BiTree,keyType key)
    //在根指针T所指的二叉排序树中递归的查找某个关键字等于key的数据元素
    //如果查找成功,则返回指向数据元素结点的指针,否则返回NULL
    {
    if((!T) || EQ(key.T->data.key) ) return (T);
    else if ( LT(key,T->data.key) ) return (SearchBST(T->lchild,key));
    else return (SearchBST(T->rchild,key));
    }

    2.二叉排序树的插入和删除
      二叉树是一种动态树,在查找过程中不存在的结点可以动态的添加到二叉树上。而且新添加的结点一定是叶子结点。并且是查找不成功的路径上访问的最后结点的左结点或又结点。
    对上面的查找方法进行改进,方便插入新结点
    ------------------新的查找方法------------
    status SearchBST(BiTree T,keytype key,BiTree &p)
    //在T上查找为key的关键字是否存在,如果存在返回true,并且使p指向该结点。如果不存在返回false,并且使p指向t上查找过程中的最后一个结点;指针f指向T的双亲,初始调用值为null
    {
    if(!T) {p = f ; return FALSE};
    else if EQ(key,T->data.key) { p = T ; return true};
    else if LT(key,T->data.key) return serachBST(T->lchild,key,T,p);
    else return SearchBST(T->rchild,key,t,p);
    }
    ------------------------插入--------------
    status insertBST(BiTree &T,ElemType e)
    {
    if(!SearchBST(T,e.key,null,p))//查找不成功
    {
    s = (BiTree)malloc(sizeof(BiNode));
    s->data = e; s->lchild = null; s->rchild = null;
    if (!p) T= s;//被插结点*S为新的根结点
    else if LT(e.ke,p->data.key) p->lchild = s;//被插结点为左结点
    else p ->rchild = s;
    return true;
    }
    }

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    感想2
    感想1
    记录4
    记录3
    记录2
    记录1
    库存物资管理系统-测试
    开学测试
    大二下开学测试有感
    大二下周总结一
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319373.html
Copyright © 2011-2022 走看看