数据结构(陈越,何钦铭)第三讲 树(上)

3.1 树与数的表示

3.1.1 顺序查找

在这里插入图片描述

int SequentialSearch(List Tbl,ElementType K){int i;Tbl->Element[0]=K;for(i=Tbl->Length;Tbl->Element[i]!=K;i--);return i;
} typedef struct LNode *List;
struct LNode{ElementType Element[MAXSIZE];int Length;
};

3.1.2 二分查找例子

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

在这里插入图片描述

3.1.3 二分查找实现

int BinarySearch(List Tbl,ElementType K){int left,right,mid,NoFound=-1;left=1;right=Tbl->Length;while(left<=right){mid=(left+right)/2;if(K<TBl->Element[mid]){right=mid-1;}else if(K>Tbl->Element[mid]){left=mid+1;}else{return mid;}return NotFound;}
}

在这里插入图片描述

3.1.4 树的定义和术语

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

3.1.5 树的表示

在这里插入图片描述

3.2 二叉树及存储结构

3.2.1 二叉树的定义及性质

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

3.2.2 二叉树的存储结构

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

在这里插入图片描述

3.3 二叉树的遍历

3.3.1 先序中序后序遍历

在这里插入图片描述

//先序遍历 
void PreOrderTraversal(BinTree BT){if(BT){printf("%d",BT->Data);PreOrderTraversal(BT->Left);PreOrderTraversal(BT->Right);}
}

在这里插入图片描述

//中序遍历 
void InOrderTraversal(BinTree BT){if(BT){PreOrderTraversal(BT->Left);printf("%d",BT->Data);PreOrderTraversal(BT->Right);}
}

在这里插入图片描述

//后序遍历 
void PostOrderTraversal(BinTree BT){if(BT){PreOrderTraversal(BT->Left);PreOrderTraversal(BT->Right);printf("%d",BT->Data);}
}

3.3.2 中序非递归遍历

基本思路:使用堆栈
在这里插入图片描述

//中序遍历非递归
void InOrderTraversal(BinTree BT){BinTree T=BT;Stack S=CreateStack(MaxSize){while(T||!IsEmpty(S)){while(T){Push(S,T);T=T->Left;}if(!IsEmpty(S)){T=Pop(S);printf("%5d",T->Data);T=T->Right;}}}
} 
//先序遍历非递归
void PreOrderTraversal(BinTree BT){BinTree T=BT;Stack S=CreateStack(MaxSize){while(T||!IsEmpty(S)){while(T){Push(S,T);printf("%5d",T->Data);T=T->Left;}if(!IsEmpty(S)){T=Pop(S);T=T->Right;}}}
}

3.3.3 层序遍历

在这里插入图片描述

在这里插入图片描述

//层序遍历
void LevelOrderTraversal(BinTree BT){Queue Q;BinTree T;if(!BT){return;}Q=CreateQueue(MaxSize);AddQ(Q,BT);while(!IsEmptyQ(Q)){T=DeleteQ(Q);printf("%d\n",T->Data);if(T->Left){AddQ(Q,T->Left);}if(T->Right){AddQ(Q,T->Right);} }
} 

3.3.4 遍历应用例子

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

小白专场

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

#include <stdio.h>
#define MaxTree 10
#define ElementType char
#define Tree int
#define Null -1struct TreeNode{ElementType Element;Tree Left;Tree Right;
}T1[MaxTree],T2[MaxTree]; Tree BuildTree(struct TreeNode T[]){Tree Root;int N,i,t;scanf("%d",&N);int check[MaxTree];char cl,cr;if(N){for(t=0;t<N;t++){check[t]=0;}for(i=0;i<N;i++){scanf(" %c %c %c",&T[i].Element,&cl,&cr);if(cl!='-'){T[i].Left=cl-'0';check[T[i].Left]=1;}else{T[i].Left=Null;}if(cr!='-'){T[i].Right=cr-'0';check[T[i].Right]=1;}else{T[i].Right=Null;}}for(t=0;t<N;t++){if(!check[t]){break;}}Root=t;}return Root;
}int lsomorphic(Tree R1,Tree R2){if((R1==Null)&&(R2==Null)){//全空 return 1;}if((R1==Null)&&(R2!=Null)){//一个空一个不空 return 0;}if(T1[R1].Element!=T2[R2].Element){//当前值不同 return 0;}if((T1[R1].Left==Null)&&(T2[R2].Left==Null)){//都没有左子树 return lsomorphic(T1[R1].Right,T2[R2].Right);}if(((T1[R1].Left!=Null)&&(T2[R2].Left!=Null))&&((T1[T1[R1].Left].Element)==(T2[T2[R2].Left].Element))){//都存在左子树且值相同,则递归判断左子树和右子树是否同构 return (lsomorphic(T1[R1].Left,T2[R2].Left)&&lsomorphic(T1[R1].Right,T2[R2].Right));}else{return (lsomorphic(T1[R1].Left,T2[R2].Right)&&lsomorphic(T1[R1].Right,T2[R2].Left));//否则判断相互左右子树是否同构 }
}int main(){Tree R1,R2;R1=BuildTree(T1);R2=BuildTree(T2);if(lsomorphic(R1,R2)){printf("Yes\n");}else{printf("No\n");}return 0;
} 

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

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

相关文章

【PYTORCH】官方的turoria实现中英文翻译

参考 https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html 背景 pytorch官方的是seq2seq是法语到英文&#xff0c;做了一个中文到英文的。 数据集 下载后解压&#xff0c;使用的data\testsets\devset\UNv1.0.devset.zh和UNv1.0.devset.en&#x…

仿叮咚买菜鸿蒙原生APP

# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了&#xff0c;但有时候我们想要实现一些复杂的功能或者效果&#xff0c;在开发文档上查阅一些资料还是比较费时的&#xff0c;有可能还找不到我们想要的内容。而社会层面上分享…

VSCode 接入DeepSeek V3大模型,附使用说明

VSCode 接入DeepSeek V3大模型,附使用说明 由于近期 DeepSeek 使用人数激增,服务器压力较大,官网已 暂停充值入口 ,且接口响应也开始不稳定,建议使用第三方部署的 DeepSeek,如 硅基流动 或者使用其他模型/插件,如 豆包免费AI插件 MarsCode、阿里免费AI插件 TONGYI Lin…

中上211硕对嵌入式AI感兴趣,如何有效规划学习路径?

今天给大家分享的是一位粉丝的提问&#xff0c;中上211硕对嵌入式AI感兴趣&#xff0c;如何有效规划学习路径&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; 中上211&#xff0c;…

Linux 目录结构与基础命令学习记录

在 Linux 的学习旅程中&#xff0c;熟练掌握基础命令是开启高效操作与系统管理的钥匙。这些命令不仅能帮助我们在 Linux 系统中自由穿梭&#xff0c;还能深入了解系统的运行状态。以下是我对 Linux 基础命令的学习总结&#xff0c;希望能为大家的 Linux 学习提供帮助。 一、Lin…

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…

Visionpro 齿轮测量

效果展示 一、题目要求 求出最大值&#xff0c;最小值&#xff0c;平均值 二、分析 1.首先要进行模板匹配 2.划清匹配范围 3.匹配小三角的模板匹配 4.卡尺 5.用找圆工具 工具 1.CogPMAlignTool 2.CogCaliperTool 3.CogFindCircleTool 4.CogFixtureTool 三、模板匹…

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析②】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase02 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月15日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-002测试用例 用例ID测试场景验证要点参考条款预期…

AlmaLinux使用Ansible自动部署k8s集群

一、环境准备 节点规划&#xff08;最低要求&#xff09; 1台Master节点&#xff08;4核/8GB内存&#xff09;2台Worker节点&#xff08;2核/4GB内存&#xff09;1台Ansible控制机&#xff08;可复用Master节点&#xff09; 系统配置 # 所有节点执行 sudo hostnamectl set-hos…

机器学习:十大算法实现汇总

机器学习十大算法代码实现&#xff1a;使用numpy、pandas&#xff0c;不调用机器学习相关库。 已将代码和相关文档上传到了github&#xff1a;golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com) 一元线性回归&#xff1a;机器学习&…

ffmpeg学习:ubuntu下编译Android版ffmpeg-kit

文章目录 前言一. 配置环境1.1 虚拟机版本1.2 安装Android环境1.2.1 Android SDK安装1.2.2 Android NDK安装 1.3 编译前的准备工作1.3.1 libtasn1-1安装1.3.2 meson安装1.3.3 harfbuzz下载 二. 编译ffmpeg-kit三. 总结 前言 ffmpeg-kit是一款跨多个平台的&#xff0c;用于在应…

Qt使用pri和pro文件进行模块化编程

假如我想要做一个功能&#xff0c;这个功能用代码模块化实现出来&#xff0c;方便将来移植&#xff0c;比如音视频播放器的界面&#xff0c;将来想要在其他工程使用时&#xff0c;只需要将widget提升为音视频播放界面即可。 当我们其他工程需要这个功能时&#xff0c;我们在调用…

C# windowForms 的DataGridView控件的使用

C# Windows Forms DataGridView 控件使用详解 DataGridView 是 Windows Forms 中用于显示和编辑表格数据的核心控件。它支持高度自定义的列类型、数据绑定、事件处理和丰富的样式配置。以下是其详细使用方法。 目录 基础使用 数据绑定 列类型与自定义

PyQt 界面编程:QDialog、QWidget、QMainWindow 的面向过程与面向对象编程

文章目录 一、PyQt简介二、面向过程编程三、面向对象编程(推荐)3.1 QWidget窗口3.2 QMainWindow窗口3.3 QDialog窗口文档: https://www.riverbankcomputing.com/static/Docs/PyQt5/ 一、PyQt简介 PyQt简介:PyQt 是一个用于创建图形用户界面(GUI)的 Python 库,它将 Qt …

Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改

本文目录 前言功能预览样式特点总结&#xff1a;1. 整体视觉风格2. 密码输入框设计3. 强度指示条4. 结果文本与原因说明 功能特点总结&#xff1a;1. 密码强度检测2. 实时反馈机制3. 详细原因说明4. 视觉提示5. 交互体验优化 密码强度检测逻辑Html代码Javascript代码 前言 能满…

智能车摄像头开源—8 元素处理

目录 一、前言 二、无元素状态 三、直线与弯道 四、十字与环岛 1、十字识别处理 2、环岛识别处理 五、坡道 六、障碍物 七、斑马线 八、入库 九、出界停车 一、前言 在写这篇文章之前&#xff0c;考虑了很久到底该写到什么程度&#xff0c;但思来想去&#xff0c;不同…

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户

matlab汽车动力学半车垂向振动模型

1、内容简介 matlab141-半车垂向振动模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

1-10 github注册仓库

如何在github中注册一个仓库&#xff1f; 1.0 注册仓库 1-1 GitHub的账号注册教程_github注册-CSDN博客 2.0 删除仓库 1-2 从github中删除创建的仓库_github删除仓库-CSDN博客 3.0 创建仓库 1-3 【教程】GitHub新建仓库新手教程_github仓库-CSDN博客 4.0 github操作 1-4 1-9 克…

EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验

在万物互联的时代&#xff0c;智能硬件正以前所未有的速度融入我们的生活。然而&#xff0c;受限于硬件性能和网络环境&#xff0c;许多智能硬件在音视频互动体验上仍存在延迟高、卡顿、回声等问题&#xff0c;严重影响了用户的使用体验。 EasyRTC智能硬件&#xff0c;凭借其强…