zoukankan      html  css  js  c++  java
  • C语言数据结构基础学习笔记——动态查找表

    动态查找表包括二叉排序树和二叉平衡树。

    二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树:

    ①若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

    ②若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

    ③它的左右子树也是二叉排序树。

    由此可得,对二叉排序树进行中序遍历可以得到一个递增的有序数列。

    二叉排序树的查找:将关键字与根结点相比较

    typedef struct BiTNode{                //二叉排序树结点结构 
        int data;                          //结点数据 
        struct BiTNode *lchild,*rchild;    //指向该结点左右孩子的指针 
    }BiTNode,*BiTree; 
    //递归代码
    BiTNode *BST_Search(BiTNode *t,ElemType key){
        if(t==NULL) return NULL;
        else{
            if(t->data==key) return t;
            else if(key<t->data) return BST_Search(t->lchild,key);
            else return BST_Search(t->rchild,key);
        }
    } 
    //非递归代码
    BiTNode *BST_Search(BiTNode *t,ElemType key){
        BiTNode *p=t;
        while(p!=NULL&&key!=p->data){
            if(key<p->data) p=p->lchild;
            else p=p->rchild;
        }
        return p;
    } 

    二叉排序树的插入思想:

    ①若树空,直接插入新结点,返回成功。

    ②树不空,若存在该关键字则插入失败,若不存在该关键字,检查根结点的值和大小关系,递归插入。

    int BST_Insert(BiTNode* &t,ElemType key){
        if(t==NULL){
            t=(BiTNode*)malloc(sizeof(BiTNode));
            t->data=key;
            t->lchild=t->rchild=NULL;
            return 1;
        }
        else if(key==t->data) return 0;
        else if(key<t->data) return BST_Insert(t->lchild,key);
        else return BST_Insert(t->rchild,key);
    } 

    构造二叉排序树:从一颗空树开始,依次插入二叉排序树中的结点。

    void BST_Creat(BiTNode* &t,ElemType key[],int n){        //n为关键字数量 
        t=NULL;    
        int i=0;
        while(i<n){
            BST_Insert(t,key[i]);
            i++;
        }
    }

    二叉排序树删除结点:有以下几种可能

    ①删除的是叶子结点:直接删除;

    ②删除的是仅有一个左子树或右子树的结点:子承父业,让那个叶子结点代替根结点;

    ③删除的是左右子树都有的结点:找到待删除结点的直接前驱或者直接后继结点,用该结点来替换待删除结点。

    二叉平衡树:是特殊的二叉排序树,其左右子树高度之差的绝对值不超过1,而且左右子树又是一颗平衡二叉树。

  • 相关阅读:
    Windows Live Writer网址缩短插件
    花点时间了解消息,句柄和窗口
    大学生的心声
    CSS,样式选择器
    如何转换非发布网站为发布网站(how to convert nonpublishing sites to publishing sites)
    SharePoint 2010视频演示和培训
    [转]ASP.NET会话(Session)保存模式
    SharePoint查阅项(Lookup)字段多值分隔符
    [转]再看关键链进度计划
    如何通过组策略管理器修改Windows系统设置选项
  • 原文地址:https://www.cnblogs.com/jackliu-timecomplexity/p/10632100.html
Copyright © 2011-2022 走看看