当前位置: 首页 > news >正文

数据结构+二叉排序树+哈希表

一、问题一:实现二叉排序树的基本运算算法

 编写一个程序,包含二叉排序树的创建、查找和删除算法,并在此基础上编写 程序完成以下功能。

(1)由关键字序列(4, 9, 0, 1, 8, 6, 3, 5, 2, 7)创建一棵二叉排序树 bt 并以括号表示法输出。 (2)判断 bt 是否为一棵二叉排序树。(对二叉排序树来说,其中序遍历序列 为一个递增有序序列,因此,对 给定的二叉树进行中序遍历,如果始终能保持前一个值比后一个值小,则说明 该二叉树是一棵二叉排序树)

(3)采用递归和非递归两种方法查找关键字为 6 的结点,并输出其查找路径。

(4)分别删除 bt 中关键字为 4 和 5 的结点,并输出删除后的二叉排序树。

#include <stdio.h> 
#include <stdlib.h> 
typedef int KeyType; 
typedef int ElemType; 
typedef struct node 
{ KeyType key; struct node *lchild,*rchild; 
}BSTNode; //插入单个数据 
BSTNode * InsertBST( BSTNode * bt,KeyType k) 
{ if(bt==NULL)//原树为空 { bt=(BSTNode *)malloc(sizeof(BSTNode));//新建根节点 bt bt->key=k;bt->lchild=bt->rchild=NULL; } else if(k<bt->key) bt->lchild=InsertBST(bt->lchild,k);//递归插到左子树 else if(k>bt->key) bt->rchild=InsertBST(bt->rchild,k);//递归插到右子树 return bt;//返回根节点 bt 
} 
//构建排序二叉树 BSTNode *CreateBST(KeyType a[],int n) { BSTNode *bt=NULL; int i=0; while(i<n)//循环将数值元素全部插入排序二叉树中 { bt=InsertBST(bt,a[i]); i++; } 
return bt; } //判断是否为排序二叉树 KeyType predt=-32767; int judgeBST(BSTNode *bt) {  int b1, b2; if (bt==NULL) //空树是一棵二叉排序树 return 1; else { b1=judgeBST(bt->lchild); //判断左子树 if(b1==0 || predt>=bt->key) return 0; predt=bt->key; //保存当前节点的关键字 b2=judgeBST (bt->rchild); //判断右子树 return b2; } } // 使用递归查找关键字为 6 的结点,并输出查找路径 
void SearchBST(BSTNode *bt,KeyType k) 
{ printf(" %d",bt->key); if(bt==NULL || bt->key==k){//递归出口 return ; } if(k<bt->key){ SearchBST(bt->lchild,k);}//左子树递归查找 else SearchBST(bt->rchild,k);//右子树递归查找 
} //使用非递归查找关键字为 6 的结点,并输出查找路径 void NRSearchBST(BSTNode *bt,KeyType k) 
{ B

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【设计模式】组合模式
  • 从快到慢学习Git指令
  • 如何编写一个CMakeLists.txt文件(由简到难,较详细)
  • RS®ZN-Z8x 开关矩阵
  • 映客基于Apache SeaTunnel 打造高效的一站式数据集成平台
  • 自然语言处理顶会​​​​ACL 2024录用阿里云38篇论文,通义团队披露多项大模型前沿技术
  • html+css 实现hover 3D按钮特效
  • 王道数据结构 | 第五章 树与二叉树【未完成】
  • ubuntu 20.04 右键新建空白文档;输入即定位文件或文件夹,而非出现搜索框
  • 0813,引用,函数重载,内存布局叭叭叭
  • C++的内存管理是怎样的?
  • 最小二乘法求拟合曲线(中线)的斜率和截距:数据背后的温柔对话
  • Python实例化指南之对象创建与初始化的实用技巧详解
  • 前端踩坑DOMException: Failed to execute ‘querySelector‘ on ‘Document‘: ‘#091.....‘
  • MySQL的InnoDB的页里面存了些什么 --InnoDB存储梳理(三)
  • 分享的文章《人生如棋》
  • [译] React v16.8: 含有Hooks的版本
  • ES2017异步函数现已正式可用
  • JavaScript HTML DOM
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 从零开始学习部署
  • 复杂数据处理
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端知识点整理(待续)
  • 物联网链路协议
  • ​Linux·i2c驱动架构​
  • ​人工智能书单(数学基础篇)
  • #if 1...#endif
  • #Ubuntu(修改root信息)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (Git) gitignore基础使用
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (蓝桥杯每日一题)love
  • (转)VC++中ondraw在什么时候调用的
  • (转)可以带来幸福的一本书
  • .htaccess 强制https 单独排除某个目录
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net Core与存储过程(一)
  • .net 程序发生了一个不可捕获的异常
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .py文件应该怎样打开?
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @selector(..)警告提示
  • [ 第一章] JavaScript 简史
  • [000-002-01].数据库调优相关学习
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [asp.net core]project.json(2)
  • [C#] 我的log4net使用手册