数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树

4.1.1 二叉搜索树及查找

在这里插入图片描述

Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;}
} Position IterFind(ElementType X,BinTree BST){while(BST){if(X>BST->Data){BST=BST->Right;}else if(X<BST->Data){BST=BST->Left;}else{return BST;}}
}Position FindMin(BinTree BST){if(!BST){return NULL;}else if(!BST->Left){return BST;}else{return FindMin(BST->Left);}
}Position FindMax(BinTree BST){if(BST){while(BST->Right){BST=BST->Right;}}return BST;
}

4.1.2 二叉搜索树的插入

BinTree Insert(ElementType X,BinTree BST){if(!BST){BST=(BinTree)malloc(sizeof(struct TreeNode));BST->Data=X;BST->Left=BST->Right=NULL;}else{if(X<BST->Data){BST->Left=Insert(X,BST->Left);}else if(X>BST->Data){BST->Right=Insert(X,BST->Right);}}return BST;
}

4.1.3 二叉搜索树的删除

BinTree Delete(ElementType X,BinTree BST){Position Tmp;if(!BST){printf("要删除的元素未找到");}else if(X<BST->Data){BST->Left=Delete(X,BST->Left);}else if(X>BST->Data){BST->Right=Delete(X,BST->Right);}else{if(BST->Left&&BST->Right){Tmp=FindMin(BST->Right);BST->Data=Tmp->Data;BST->Right=Delete(BST->Data,BST->Right);}else{Tmp=BST;if(!BST->Left){BST=BST->Right;}else if(!BST->Right){BST=BST->Left;}free(Tmp);}}return BST;
}

4.2 平衡二叉树

4.2.1 什么是平衡二叉树

在这里插入图片描述

4.2.2 平衡二叉树的调整

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;}
} Position IterFind(ElementType X,BinTree BST){while(BST){if(X>BST->Data){BST=BST->Right;}else if(X<BST->Data){BST=BST->Left;}else{return BST;}}
}Position FindMin(BinTree BST){if(!BST){return NULL;}else if(!BST->Left){return BST;}else{return FindMin(BST->Left);}
}Position FindMax(BinTree BST){if(BST){while(BST->Right){BST=BST->Right;}}return BST;
}BinTree Insert(ElementType X,BinTree BST){if(!BST){BST=(BinTree)malloc(sizeof(struct TreeNode));BST->Data=X;BST->Left=BST->Right=NULL;}else{if(X<BST->Data){BST->Left=Insert(X,BST->Left);}else if(X>BST->Data){BST->Right=Insert(X,BST->Right);}}return BST;
}BinTree Delete(ElementType X,BinTree BST){Position Tmp;if(!BST){printf("要删除的元素未找到");}else if(X<BST->Data){BST->Left=Delete(X,BST->Left);}else if(X>BST->Data){BST->Right=Delete(X,BST->Right);}else{if(BST->Left&&BST->Right){Tmp=FindMin(BST->Right);BST->Data=Tmp->Data;BST->Right=Delete(BST->Data,BST->Right);}else{Tmp=BST;if(!BST->Left){BST=BST->Right;}else if(!BST->Right){BST=BST->Left;}free(Tmp);}}return BST;
}

小白专场

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>typedef struct TreeNode *Tree;
struct TreeNode{int v;Tree Left,Right;int flag;
};Tree NewNode(int V){Tree T=(Tree)malloc(sizeof(struct TreeNode));T->v=V;T->Left=T->Right=NULL;T->flag=0;return T;
}Tree Insert(Tree T,int V){if(!T){T=NewNode(V);}else{if(V>T->v){T->Right=Insert(T->Right,V);}else{T->Left=Insert(T->Left,V);}}return T;
}Tree MakeTree(int N){Tree T;int i,V;scanf("%d",&V);T=NewNode(V);for(i=1;i<N;i++){scanf("%d",&V);T=Insert(T,V);}return T;
}int check(Tree T,int V){if(T->flag){if(V<T->v){return check(T->Left,V);}else if(V>T->v){return check(T->Right,V);}else{return 0;}}else{if(V==T->v){T->flag=1;return 1;}else{return 0;}}
}int Judge(Tree T,int N){int i,V,flag=0;scanf("%d",&V);if(V!=T->v){flag=1;}else{T->flag=1;}for(i=1;i<N;i++){scanf("%d",&V);if((!flag)&&(!check(T,V))){flag=1;}}if(flag){return 0;}else{return 1;}
}void ResetT(Tree T){if(T->Left){ResetT(T->Left);}if(T->Right){ResetT(T->Right);}T->flag=0;
}void FreeTree(Tree T){if(T->Left){FreeTree(T->Left);}if(T->Right){FreeTree(T->Right);}free(T);
}int main(){int N,L,i;Tree T;scanf("%d",&N);while(N){scanf("%d",&L);T=MakeTree(N);for(i=0;i<L;i++){if(Judge(T,N)){printf("Yes\n");	}else{printf("No\n");}ResetT(T);}FreeTree(T);scanf("%d",&N);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24226.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络空间安全(1)web应用程序的发展历程

前言 Web应用程序的发展历程是一部技术创新与社会变革交织的长卷&#xff0c;从简单的文档共享系统到如今复杂、交互式、数据驱动的平台&#xff0c;经历了多个重要阶段。 一、起源与初期发展&#xff08;1989-1995年&#xff09; Web的诞生&#xff1a; 1989年&#xff0c;欧洲…

【Matlab仿真】Matlab Function中如何使用静态变量?

背景 根据Simulink的运行机制&#xff0c;每个采样点会调用一次MATLAB Function的函数&#xff0c;两次调用之间&#xff0c;同一个变量的前次计算的终值如何传递到当前计算周期来&#xff1f;其实可以使用persistent变量实现函数退出和进入时内部变量值的保持。 persistent变…

网络安全 linux学习计划 linux网络安全精要

2.使用命令行 文件系统层次标准&#xff08;FHS&#xff09;是一个文件和目录在Unix和Linux操作系统上面应该如何存储的定义。 /bin 重要的二进制可执行程序/boot 与系统启动有关的文件/etc 系统配置文件/home 普通用户家目录/lib 重要的系统库/media 可移动介质的挂载路径/m…

基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 《计算机网络》题库管理系统是一种新颖的考试管理模式&#xff0c;因为系统是用Java技术进行开发。系统分为三个用户进行登录并操作&#xff0c;分别是管理员、教师和学生。教师在系统后台新增试题和试卷&#xff0c;学生进行在线考试&#xff0c;还能对考生记录、错题…

Pretraining Language Models with Text-Attributed Heterogeneous Graphs

Pretraining Language Models with Text-Attributed Heterogeneous Graphs EMNLP 推荐指数&#xff1a;#paper/⭐⭐#​ 贡献&#xff1a; 我们研究了在更复杂的数据结构上预训练LM的问题&#xff0c;即&#xff0c;TAHG。与大多数只能从每个节点的文本描述中学习的PLM不同&…

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

2025-02-25 学习记录--C/C++-用C语言实现删除字符串中的子串

用C语言实现删除字符串中的子串 在C语言中&#xff0c;你可以使用strstr函数来查找子串&#xff0c;然后用memmove或strcpy来覆盖或删除找到的子串。 一、举例 &#x1f430; #include <stdio.h> // 包含标准输入输出库&#xff0c;用于使用 printf 函数 #include <s…

Python入门12:面向对象的三大特征与高级特性详解

面向对象编程&#xff08;OOP&#xff09;是Python编程中非常重要的一部分&#xff0c;它通过封装、继承和多态这三大特征&#xff0c;帮助我们更好地组织和管理代码。除此之外&#xff0c;Python还提供了一些其他特性&#xff0c;如类属性、类方法和静态方法&#xff0c;进一步…

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存&#xff0c;第一次接触这个东西是在考研学习408的时候&#xff0c;计算机组成原理里面学习到Cache缓存&#xff0c;用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言 RTP封装H.264时&#xff0c;RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础&#xff1a;H.264专题&#xff08;4&#xff09;——NALU Header&#xff1a;forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道&#xff0c;nal_unit…

Linux 驱动入门(6)—— IRDA(红外遥控模块)驱动

文章目录 一、编译替换内核和设备树二、IRDA&#xff08;红外遥控模块&#xff09;1. 红外遥控简介2. 红外遥控器协议3. 编程思路 三、驱动代码1. GPIO 实现1.1 驱动层代码1.2 应用层代码 2. 设备树实现2.1 修改设备树2.2 驱动层代码2.3 应用层代码 3. 上机测试 一、编译替换内…

QSNCTF-WEB做题记录(2)

[第一章 web入门]常见的搜集 来自 <天狩CTF竞赛平台> 1&#xff0c;首先就是对网站进行目录枚举爆破 dirsearch -u http://challenge.qsnctf.com:31616 -x 404,403 得到如下的目录&#xff0c;分别查看一下内容 /.DS_Store /inde…

「软件设计模式」责任链模式(Chain of Responsibility)

深入解析责任链模式&#xff1a;用C打造灵活的请求处理链 引言&#xff1a;当审批流程遇上设计模式 在软件系统中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个请求需要经过多个处理节点的判断&#xff0c;每个节点都有权决定是否处理或传递请求。就像企业的请假审批…

Ocelot 请求聚合

请求聚合 当下游服务是返回404状态码&#xff0c;在返回结果中&#xff0c;其对应的值则为空值&#xff0c; 即使聚合路由中所有的下游服务都返回404状态码&#xff0c;聚合路由的返回结果也不会是404状态码。 Ocelot允许你声明聚合路由&#xff0c;这样你可以把多个正常的Ro…

MongoDB安装与配置 导入导出

1、MongoDB的安装 首先cd到目录 cd /usr/local/ 执行下载 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.7.tgz 解压文件 tar -xvf mongodb-linux-x86_64-rhel80-7.0.7.tgz 将解压后的“mongodb-linux-x86_64-rhel80-7.0.7”文件夹重命名…

Kotlin 知识点二 延迟初始化和密封类

对变量延迟初始化 Kotlin 语言的许多特性&#xff0c;包括变量不可变&#xff0c;变量不可为空&#xff0c;等等。这些特性 都是为了尽可能地保证程序安全而设计的&#xff0c;但是有些时候这些特性也会在编码时给我们带来不 少的麻烦。 比如&#xff0c;如果你的类中存在很多…

简单介绍 SSL 证书类型: DV、OV、EV 的区别

SSL证书类型DV、OV、EV 区别&#xff1a; DV(域名验证型)SSL证书 OV(组织验证型)SSL证书 EV(扩展验证型)SSL证书

深度解析SmartGBD助力Android音视频数据接入GB28181平台

在当今数字化时代&#xff0c;视频监控与音视频通信技术在各行各业的应用愈发广泛。GB28181协议作为中国国家标准&#xff0c;为视频监控设备的互联互通提供了规范&#xff0c;但在实际应用中&#xff0c;许多Android终端设备并不具备国标音视频能力&#xff0c;这限制了其在相…

1分钟用DeepSeek编写一个PDF转Word软件

一、引言 如今&#xff0c;在线工具的普及让PDF转Word成为了一个常见需求&#xff0c;常见的pdf转word工具有收费的wps&#xff0c;免费的有pdfgear&#xff0c;见下文&#xff1a; PDFgear:一款免费的PDF编辑、格式转化软件-CSDN博客 还有网上在线的免费pdf转word工具smallp…

PyCharm Professional 2025 安装配置全流程指南(Windows平台)

一、软件定位与核心功能 PyCharm 2025 是 JetBrains 推出的智能 Python IDE&#xff0c;新增深度学习框架自动补全、实时性能热力图等功能1。相较于社区版&#xff0c;专业版支持&#xff1a; Web开发&#xff08;Django/Flask&#xff09;数据库工具&#xff08;PostgreSQL/…