通用二叉搜索树实现详解

版权申诉
0 下载量 52 浏览量 更新于2024-10-03 收藏 2KB ZIP 举报
资源摘要信息:"BST.zip_generic" 是一个通用的二叉搜索树库,适用于各种使用场景。二叉搜索树(BST)是一种重要的数据结构,广泛应用于计算机科学中,特别是在查找、插入和删除操作中需要对数据进行有效管理的场景中。在该文件中,包含两个关键的头文件:BSTree.h 和 BSTNode.h,它们分别定义了二叉搜索树的结构和节点结构,用于构建通用的二叉搜索树。 BSTree.h 文件可能包含了定义树类的代码,其中可能包括了构建树结构、插入节点、删除节点、查找节点等操作的函数或方法。此类的数据结构通常会包括私有成员,比如指向根节点的指针,以及可能的其他辅助数据,例如用于记录树中节点数量的计数器等。二叉搜索树的一个关键特性是,树中的每个节点都包含一个值,该值可以用来确定树中其他节点的父子关系——对于任何节点N,其左子树中的所有节点值都小于N的值,其右子树中的所有节点值都大于N的值。 BSTNode.h 文件则定义了构成树的节点本身,每个节点都可能包含三个主要部分:存储数据的变量、指向左子节点的指针和指向右子节点的指针。节点的这个结构允许树的每部分都可以作为一棵独立的子树存在,从而形成递归的数据结构。在二叉搜索树中,节点之间的这种关系使得树可以保持有序,为执行各种操作提供了便利。 二叉搜索树库的通用性意味着它不依赖于特定的数据类型,这是通过使用模板(在C++中)或泛型(在其他编程语言中)实现的。这种设计允许开发者使用同一套代码结构来处理不同类型的数据,比如整数、浮点数、字符串或其他对象,只要这些类型支持比较运算符。这种灵活性使得BST.zip_generic成为一个强大且可重用的资源,可适用于排序、优先队列、表达式解析等众多应用。 在具体实现时,通用二叉搜索树的插入操作通常涉及到找到合适的叶节点位置并创建新节点。查找操作则是一个简单的递归过程,从根节点开始,比较节点值,然后根据比较结果选择往左子树还是右子树继续搜索。删除操作相对复杂,需要处理多种情况,包括删除的节点是叶节点、只有一个子节点或者有两个子节点。在删除有两个子节点的节点时,常见的处理方法是找到该节点的中序后继(或前驱),用它的值替换被删除的节点,然后删除这个后继节点。 综上所述,BST.zip_generic 提供了一套灵活、高效的二叉搜索树实现,适用于多种编程需求。开发者通过使用BSTree.h 和 BSTNode.h 中定义的数据结构和算法,可以快速地集成到自己的项目中,大大节约了开发时间和资源。由于其泛型特性,这样的二叉搜索树库对于需要处理动态数据集合的软件开发尤其有价值。

import pandas as pd from sklearn import metrics from sklearn.model_selection import train_test_split import xgboost as xgb import matplotlib.pyplot as plt import openpyxl # 导入数据集 df = pd.read_csv("/Users/mengzihan/Desktop/正式有血糖聚类前.csv") data=df.iloc[:,:35] target=df.iloc[:,-1] # 切分训练集和测试集 train_x, test_x, train_y, test_y = train_test_split(data,target,test_size=0.2,random_state=7) # xgboost模型初始化设置 dtrain=xgb.DMatrix(train_x,label=train_y) dtest=xgb.DMatrix(test_x) watchlist = [(dtrain,'train')] # booster: params={'booster':'gbtree', 'objective': 'binary:logistic', 'eval_metric': 'auc', 'max_depth':12, 'lambda':10, 'subsample':0.75, 'colsample_bytree':0.75, 'min_child_weight':2, 'eta': 0.025, 'seed':0, 'nthread':8, 'gamma':0.15, 'learning_rate' : 0.01} # 建模与预测:50棵树 bst=xgb.train(params,dtrain,num_boost_round=50,evals=watchlist) ypred=bst.predict(dtest) # 设置阈值、评价指标 y_pred = (ypred >= 0.5)*1 print ('Precesion: %.4f' %metrics.precision_score(test_y,y_pred)) print ('Recall: %.4f' % metrics.recall_score(test_y,y_pred)) print ('F1-score: %.4f' %metrics.f1_score(test_y,y_pred)) print ('Accuracy: %.4f' % metrics.accuracy_score(test_y,y_pred)) print ('AUC: %.4f' % metrics.roc_auc_score(test_y,ypred)) ypred = bst.predict(dtest) print("测试集每个样本的得分\n",ypred) ypred_leaf = bst.predict(dtest, pred_leaf=True) print("测试集每棵树所属的节点数\n",ypred_leaf) ypred_contribs = bst.predict(dtest, pred_contribs=True) print("特征的重要性\n",ypred_contribs ) xgb.plot_importance(bst,height=0.8,title='影响糖尿病的重要特征', ylabel='特征') plt.rc('font', family='Arial Unicode MS', size=14) plt.show()

2023-07-07 上传
2023-06-03 上传