首页 > 其他分享 >数据结构-------------------二叉排序树的查找

数据结构-------------------二叉排序树的查找

时间:2024-08-03 15:28:53浏览次数:9  
标签:NULL return int 二叉 ------------------- BSTTree key BSTNode 数据结构

#include <stdio.h>  
#include <stdlib.h>  

typedef struct BSTNode {  
    int key;  
    struct BSTNode *lchild;  
    struct BSTNode *rchild;  
} BSTNode, *BSTTree;  

// 递归实现二叉排序树的查找操作  
BSTNode *BSTSearch(BSTTree T, int key) {  
    if (T == NULL)  
        return NULL;  
    else if (key == T->key)  
        return T;  
    else if (key > T->key)  
        return BSTSearch(T->rchild, key);  
    else  
        return BSTSearch(T->lchild, key);  
}  

// 非递归实现方法  
BSTNode *BSTSearch2(BSTTree T, int key) {  
    while (T != NULL && key != T->key) {  
        if (key > T->key)  
            T = T->rchild;  
        else  
            T = T->lchild;  
    }  
    return T;  
}  

// 插入节点  
int BST_Insert(BSTTree *T, int k) {  
    if (*T == NULL) {  
        *T = (BSTNode *)malloc(sizeof(BSTNode));  
        (*T)->key = k;  
        (*T)->lchild = (*T)->rchild = NULL;  
        return 1;  
    } else if (k == (*T)->key) {  
        return -1; // 关键字相同插入失败  
    } else if (k < (*T)->key) {  
        return BST_Insert(&((*T)->lchild), k);  
    } else {  
        return BST_Insert(&((*T)->rchild), k);  
    }  
}  

// 创建二叉排序树  
void Creat_BSTTree(BSTTree *T, int str[], int n) {  
    *T = NULL; // 初始状态为空   
    for (int i = 0; i < n; i++) {  
        BST_Insert(T, str[i]);  
    }  
}  

// 释放二叉排序树的内存  
void BST_Destroy(BSTTree *T) {  
    if (*T != NULL) {  
        // 先递归释放左子树  
        BST_Destroy(&((*T)->lchild));  
        // 再递归释放右子树  
        BST_Destroy(&((*T)->rchild));  
        // 最后释放当前节点  
        free(*T);  
        *T = NULL; // 将指针置为空  
    }  
}  

int main() {  
    BSTTree tree;  
    int arr[] = {40, 20, 60, 10, 30, 50, 70};  
    int n = sizeof(arr) / sizeof(arr[0]); //用以确定元素个数 

    Creat_BSTTree(&tree, arr, n); // 创建二叉排序树  

     
    int searchKey;  
    printf("请输入要查找的值: ");  
    scanf("%d", &searchKey);  

    BSTNode *result = BSTSearch(tree, searchKey);  //递归方式查找
    if (result != NULL) {  
        printf("找到了节点: %d\n", result->key);  
    } else {  
        printf("未找到节点\n");  
    }  

    // 释放内存  
    BST_Destroy(&tree);  
    return 0;  
}

标签:NULL,return,int,二叉,-------------------,BSTTree,key,BSTNode,数据结构
From: https://blog.csdn.net/bxjsnxidnsnkw/article/details/140891241

相关文章

  • 【MATLAB源码】机器视觉与图像识别技术(7)续---BP神经网络
    系列文章目录在最后面,各位同仁感兴趣可以看看!BP神经网络第一节、BP网络定义第二节、BP网络结构及其特点第三节、信息传播方式信息的正向传播:实质是计算网络的输出误差的反向传播:实质是学习过程第四节、BP网络的算法流程图及设计第五节、BP网络的局限与不足第八节、BP网络......
  • 【MATLAB源码】数学建模基础教程---初步认识数学建模
    系列文章目录在最后面,各位同仁感兴趣可以看看!什么是数学建模含义1.区分数学模型和数学建模2.建立数学模型的注意事项3.数学建模流程图解4.数学建模模型分类5.论文常用套路6.最后:总结系列文章目录含义所谓数学建模,简言之,就是对研究对象进行系统的抽象和概化,进而形成数学......
  • ssm+vue服装店管理系统【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代商业的快速发展,传统服装店的管理方式面临着前所未有的挑战。传统的手工记录和简单的电子表格已难以满足日益增长的库存控制、商品追踪及顾客......
  • ssm+vue电影推荐系统【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电影作为一种重要的文化娱乐形式,其传播与消费方式发生了深刻变革。在线视频平台如雨后春笋般涌现,为用户提供了海量的电影资......
  • ssm+vue的校园后台报修管理系统设计与实现【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的不断推进,校园内各类设施设备的数量与复杂度日益增长,如何高效管理这些设备的维护与报修工作成为了学校管理的一大挑战。传统的报修方......
  • ssm+vue高校家教平台【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育行业的蓬勃发展与信息技术的飞速进步,高校家教平台作为连接学生与家长、教师之间的桥梁,其重要性日益凸显。当前,高校学生在学业上寻求额外辅导......
  • react-hook-form验证
    import{useForm}from"react-hook-form";import{zodResolver}from"@hookform/resolvers/zod";importi18nextfrom"i18next";import{z}from"zod";import{zodI18nMap}from"zod-i18n-map";//Impor......
  • go-zero 微服务框架集成 gorm 实操
    目录1.config的结构体2.配置文件声明3.添加svcContext4.定义你的相关表或者模型作为服务,肯定要和数据库交互的,所以在go-zero框架里集成数据库的操作是必不可少的,今天看看go-zero的rpc应用如何集成gorm框架。总体的思路分这几步:定义你的配置项结构体定义你的配置......
  • 4、Qt-pyqt6常用基本控件
    控件对应QTDesigner中的左侧控件Layouts--布局管理控件名说明VerticalLayout垂直布局HorizontalLayout水平布局GridLayout网格布局FormLayout表单布局Spacers--弹簧控件名说明HoriziontalSpacer水平弹簧VerticalSpacer垂......
  • 知乎x-zse-96逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲......