首页 > 其他分享 >二叉查找树的接口设计

二叉查找树的接口设计

时间:2024-05-04 23:56:02浏览次数:23  
标签:Proot 接口 二叉 查找 BSTree New NULL Root 节点

/*************************************************
 *
 *   file name:BianrySearchTree.c
 *   author   :[email protected]
 *   date     :2024/05/04
 *   brief    :二叉查找树的接口设计
 *   note     :None
 *
 *   CopyRight (c) 2024    [email protected]    All Right Reseverd
 *
 **************************************************/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include "drawtree.h"
/*************************************************
 *
 *   func name     :
 *   brief         :
 *   func parameter:
 *
 *
 *   return        :None
 *   note          :None
 *   func author   :[email protected]
 *   date          :2024/05/04
 *   version       :V1.0
 **************************************************/
// 二叉查找树的节点的结构体构建
#if 0
typedef int DataType_t;
typedef struct BSTreeNode
{
    DataType_t KeyVal;
    struct BSTreeNode *lchild;
    struct BSTreeNode *rchild;

} BSTree_t;
#endif

// 创建BST树的根节点,并对根节点初始化
BSTree_t *BSTree_Create(DataType_t keyval)
{
    // 创建一个根节点并为根节点申请内存
    BSTree_t *Root = (BSTree_t *)calloc(1, sizeof(BSTree_t)) if (Root == NULL)
    {
        perror("calloc memory for root is failed!\n");
        exit(-1);
    }
    // 初始化根节点
    Root->KeyVal = keyval;
    Root->lchild = NULL;
    Root->rchild = NULL;

    return Root;
}

// 创建一个BST树的新节点,并对新结点进行初始化
BSTree_t *BSTree_NewNode(DataType_t keyval)
{
    // 创建一个新结点,并为新结点申请新内存
    BSTree_t *New = (BSTree_t *)calloc(1, sizeof(BSTnode_t));
    if (New == NULL)
    {
        perror("calloc memory for newnode is failed!\n");
        exit(-1);
    }
    // 初始化根节点
    New->KeyVal = keyval;
    New->lchild = NULL;
    New->rchild = NULL;

    return New;
}

// 向BST树中加入节点
bool BSTree_InsertNode(BSTree_t *Root, DataType_t keyval)
{
    BSTree_t *New = BSTree_NewNode(keyval);
    BSTree_t *Proot = Root;
    if (New == NULL)
    {
        printf("Create NewNode Error\n");
        return false;
    }

    // 判断根节点是否为空
    if (Root == NULL)
    {
        Root = New;
        return true;
    }
    else // 二叉查找树非空
    {

        while (Proot)
        {
            if (New->KeyVal == Proot->KeyVal) // 新节点键值是否与根节点相同,相同则插入失败
            {
                printf("Insert newnode failed!\n");
                return false;
            }
            else // 如果不相等则继续分析
            {
                if (New->KeyVal < Proot->KeyVal) // 新结点的键值小于根节点的键值,则把根节点的左子树作为新的根节点
                {
                    if (Proot->lchild == NULL) // 如果左节点为空就直接插入
                    {
                        Proot->lchild = New;
                        break;
                    }

                    Proot = Proot->lchild;
                }
                else // 新结点的键值大于根节点的键值,则把根节点的右子树作为新的根节点
                {
                    if (Proot->rchild == NULL) // 如果右节点为空就直接插入
                    {
                        Proot->rchild = New;
                        break;
                    }

                    Proot = Proot->rchild;
                }
            }
        }
    }
    return true;
}

int main(void)
{
    BSTree_t *Root = BSTree_Create(10);
    BSTree_InsertNode(Root, 2);
    BSTree_InsertNode(Root, 8);
    BSTree_InsertNode(Root, 14);
    BSTree_InsertNode(Root, 23);
    return 0;
}

标签:Proot,接口,二叉,查找,BSTree,New,NULL,Root,节点
From: https://www.cnblogs.com/bell-c/p/18172978

相关文章

  • 二叉树相关的三个常见算法题
    算法题一//计算一颗二叉树的所有节点的数量intBinaryTree_CountNode(Tnode_t*root){intn1,n2;if(NULL==root){return0;}n1=BinaryTree_CountNode(root->lchild);n2=BinaryTree_CountNode(root->rchild);returnn1+......
  • 接口自动化测试框架搭建的思路
    参数替换的思路为什么替换参数:请求参数不一定全部都是写死的,有可能存在接口之间的数据依赖在Excel中写入特殊标记(如#key#),说明写了特殊标记的地方需要做替换处理读取Excel中的参数,通过正则表达式提取出来需要被替换的key,得到一个list遍历list,根据list中不同的参数,去不同的地方......
  • CMakeLists.txt --- 导入接口库(预编译库)
    以接口库的方式导入预编译库cmake_minimum_required(VERSION3.9)project(test)set(CMAKE_BUILD_TYPEDebug)set(CMAKE_C_FLAGS"$ENV{CFLAGS}-O2-Wall-pthread")set(CMAKE_CXX_FLAGS"$ENV{CFLAGS}-O2-Wall-pthread-std=c++11-std=gnu++11")#设置mo......
  • Alpha冲刺接口文档
    Alpha冲刺用户模块POST注册POST/user/register用户在注册时需要设定好:用户名、用户密码、用户的邮箱、邮箱验证码绑定邮箱不是输入邮箱就可以了,而是要发送验证码到指定的邮箱中,确认完验证码之后才能绑定发送邮箱验证码会单独提供一个接口。逻辑可以参照,以下序列图sequen......
  • 15.Petclinic搜索接口测试执行-postman
    因 https://spring-petclinic-rest.k8s.hogwarts.ceshiren.com/petclinic/api/owners?lastName=LASTNAME接口不在支持使用故事用下方接口进行接口测试一、通过抓包获取接口信息,分析入参及响应数据选中接口鼠标右键选择:保存har导入postman二、根据接口和开发产品确认入参......
  • simpread-课程 28:API 接口请求日志【后端】
    1、添加审核日志实体1.1实体定义在项目Electric.Entity,添加文件夹:AuditLogs,并添加类:EleAuditLog。EleAuditLog完整代码如下:namespaceElectric.Entity.AuditLogs;///<summary>///审核日志///</summary>[Index(nameof(AuditLogType))]publicclassEleAuditLog:E......
  • idea在类和接口上面自动生成注释
    详细教程:https://www.cnblogs.com/ya-qiang/p/9462766.html1、File>>Settings…>>Editor>>FileandCodeTemplates/***@Auther:Zxd*@Date:${YEAR}/${MONTH}/${DAY}${TIME}*@Description:*/  ......
  • RESTful风格接口设计
    我们平常开发一般只使用GET、POST方法。而对于HTTP给出的PUT、DELETE等其他方法都没使用。以RESTful风格设计接口就能全部用上这些方法。按照RESTful理查德森成熟度模型改造接口这个模型跟数据库范式等级相似,都是一层一层满足。我们的mvc接口不好说是哪一级,一般都是每个操作一个......
  • 双向链表及双向循环链表接口设计
    双向链表及双向循环链表接口设计双向链表接口设计由于带头结点更加方便用户进行数据访问,所以本次创建一条带头结点的双向不循环的链表。创建新的头结点和新节点//数据类型typedefintdatatype_t;//创建结点类型typedefstructdoublelinckelist{datatype_tdata;......
  • 双向链表及双向循环链表接口设计
    双向链表及双向循环链表接口设计双向链表接口设计由于带头结点更加方便用户进行数据访问,所以本次创建一条带头结点的双向不循环的链表。创建新的头结点和新节点``//数据类型`typedefintdatatype_t;//创建结点类型typedefstructdoublelinckelist{datatype_tdata;//......