zoukankan      html  css  js  c++  java
  • 二叉排序树查找算法代码

    小狼程序员

    路虽远行则必达,事虽难做则必成!!

    二叉排序树查找算法代码

    什么是二叉排序树:首先是一棵二叉树,或者为空,或者满足以下条件:

    1,左子树不空,所有左子树值都小于根节点;

    2,右子树不空,所有右子树值都大于根节点;

    3,根节点的左右子树也是二叉排序树。

    二叉排序树(二叉链表),中序遍历二叉排序树即可变成有序数列。(无序数列通过构建二叉排序树成有序序列)

    成员函数

    写一个二叉排序树的类,里面应该有成员函数:

    获取根结点中序遍历递归查找;迭代查找;插入元素;最大值;最小值;查找前驱结点;查找后继结点;用结点 nodeM 替换结点 nodeN;删除结点是key的元素等等。

    一般对二叉排序树的操作:创建;插入(递归);删除;搜索(递归)。

    代码:

    #include <iostream>
    using namespace std;
    
    typedef struct BSTNode {
        int data;
        struct BSTNode *lTree,*rTree;
    }BSTNode,*BSTree;
    
    //递归实现二叉排序树的插入操作
    void InsertBST(BSTree &BT,BSTNode *BN)
    {
        if(BT==NULL)
            BT=BN;
        else if(BT->data > BN->data)
            InsertBST(BT->lTree,BN);
        else
            InsertBST(BT->rTree,BN);
    }
    
    //删除操作
    //判断它属于哪种类型
    //1、叶子节点。
    //2、只有左子树或者只有右子树。
    //3、既有左子树,又有右子树。
    bool deleteBST(BSTree &BT,BSTNode *BN)
    {
        BSTNode* tmp;
        if(BN->lTree == NULL && BN->rTree == NULL)
            delete BN;
        else if(BN->lTree == NULL)
        {
            tmp=BN;
            BN=BN->rTree;
            delete tmp;
        }    
        else if(BN->rTree == NULL)
        {
            tmp=BN;
            BN=BN->lTree;
            delete tmp;
        }    
        else
        {
            tmp=BN;
            BSTNode * s = BN->lTree;
            while (s->rTree) 
            { 
                tmp = s; 
                s = s->rTree; 
            } 
            BN->data = s->data;
            if (tmp != BN) 
            {
                tmp->rTree = s->lTree;
            }
            else 
            { 
                tmp->lTree = s->lTree;
            }
            delete s;
        }
        return true;
    }
    //创建二叉排序树
    void CreateBST(BSTree &BT,int n)  
    {  
        BT=NULL;//这里一定要将BT置空,表示刚开始的时候是空树,不置空的话,编译器分配的BT是非空的  
        int i,j;  
        int r[100];  
        BSTNode *s;  
        for(j=0;j<n;j++)  
            cin>>r[j];  
        for(i=0;i<n;i++)  
        {  
            s=new BSTNode;  
            s->data=r[i];  
            s->lTree=NULL;  
            s->rTree=NULL;  
            InsertBST(BT,s);  
        }  
    }
    
    //递归实现搜索查找
    BSTNode* searchBST(BSTree &BT,int value)
    {
        if(BT==NULL)
            return  NULL;
        if(BT->data==value)
            return BT;
        if(BT->data>value)
            return searchBST(BT->lTree,value);
        if(BT->data<value)
            return searchBST(BT->rTree,value);
    }
    
    int main()
    {
        BSTree bt;
        BSTNode * bn;
        CreateBST(bt,20);
        searchBST(bt,16);
        return 0;
    }

    分类: 算法

  • 相关阅读:
    希尔排序的理解和实现(Java)
    直接插入排序实现(Java)
    冒泡排序算法与选择排序算法
    Java中IO流中所涉及到的各类方法介绍
    Java常见编码方式简介
    Java中的BufferedReader 的readLine方法
    Java使用基本字节流OutputStream的四种方式对于数据复制(文本,音视频,图像等数据)
    java中IO流操作的标准异常类
    Java中常见数据结构:list与map
    互联网的网络地址分类
  • 原文地址:https://www.cnblogs.com/grj001/p/12224341.html
Copyright © 2011-2022 走看看