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

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

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;
} 

相关文章:

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

3.1 树与数的表示 3.1.1 顺序查找 int SequentialSearch(List Tbl,ElementType K){int i;Tbl->Element[0]K;for(iTbl->Length;Tbl->Element[i]!K;i--);return i; } typedef struct LNode *List; struct LNode{ElementType Element[MAXSIZE];int Length; };3.1.2 二分…...

企业文件安全:零信任架构下的文件访问控制

在企业数字化转型的进程中&#xff0c;传统的文件访问控制模型已难以满足日益复杂的网络安全需求。零信任架构作为一种新兴的安全理念&#xff0c;为企业的文件安全访问提供了全新的解决方案。 一、传统文件访问控制的局限性 传统的文件访问控制主要基于网络边界&#xff0c;…...

性格测评小程序06用户注册校验

目录 1 必填校验2 验证密码强度3 账号唯一性校验最终效果总结 上一篇我们介绍了用户注册的功能&#xff0c;注册的时候对密码进行了加密。除了密码加密外还需要验证账号的唯一性和密码强度的问题&#xff0c;本篇我们介绍一下如何在表单提交的时候增加自定义校验的能力。 1 必填…...

$符(前端)

1‌. jQuery 的别名 用途&#xff1a;$ 是 jQuery 的核心标识符&#xff0c;用于快速选择 DOM 元素或调用 jQuery 方法。 // 选择所有 <div> 元素并隐藏 $(div).hide(); // 发起 AJAX 请求 $.get(/api/data, response > console.log(response)); 注意&#xff1a;虽然…...

Windows 11如何显示全部右键菜单?

在Windows 11系统中&#xff0c;默认的右键菜单进行了简化&#xff0c;若你想要显示全部右键菜单&#xff0c;可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;临时显示完整右键菜单 在需要操作的区域按下Shift键的同时点击鼠标右键&#xff0c;此时弹出的就是完整的…...

离线量化算法和工具 --学习记录1

离线量化算法和工具 一、离线量化的基础概念1.1、基本流程1.2、量化的优点和缺点1.3、如何生产一个硬件能跑的量化模型1.4、PTQ的概念以及和QAT的区别1.5、离线量化的标准流程1.6、校准数据的选择1.7、量化模式的选择1.8、校准方式的选择1.9、量化算法的选择1.10、写入量化参数…...

python第七课

WSGI Middleware 中间件&#xff0c;可以理解称对应用程序的一组装饰器&#xff0c;对两边都起作用的元素。 重写environ&#xff0c;然后基于URL&#xff0c;将请求对象路由给不同的应用对象支持多个应用或者框架顺序地运行于同一个进程中通过转发请求和相应&#xff0c;支持负…...

华为IPD简介

创作灵感 现在“熟悉华为IPD”经常出现在高级招聘岗位能力要求上&#xff0c;于是作者写下此文章以此巩固相关知识储备 名词解释 华为IPD&#xff08;Integrated Product Development&#xff0c;集成产品开发&#xff09;是华为引入并优化的一套产品开发管理体系&#xff0…...

如何在Spring Boot中配置分布式配置中心

文章目录 如何在Spring Boot中配置分布式配置中心分布式配置中心的概念1. 集中管理2. 动态配置3. 环境隔离4. 安全性5. 可扩展性与适应性6. 与 CI/CD 流程的集成Spring Cloud Config 概述1. 集中式配置管理2. 多环境支持3. 版本控制4. 动态刷新5. 安全性6. 与微服务架构的无缝集…...

Golang internals

To be continued... time.Time golang的时区和神奇的time.Parse context.Context Go Context的踩坑经历 sync.Pool sync.Pool workflow in Go 1.12 new shared pools in Go 1.13 什么是cpu cache理解 Go 1.13 中 sync.Pool 的设计与实现Go: Understand the Design of Sync.Pool…...

天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结

一、项目背景与目标 本文记录在天翼云昇腾910B服务器上部署DeepSeek 70B模型的全过程。该模型是基于LLaMA架构的知识蒸馏版本&#xff0c;模型大小约132GB。 1.1 硬件环境 - 服务器配置&#xff1a;天翼云910B服务器 - NPU&#xff1a;8昇腾910B (每卡64GB显存) - 系统内存&…...

数据治理常用的开源项目有哪些?

数据治理是企业在大数据时代中确保数据质量、安全性和可用性的关键环节。开源项目在数据治理中扮演着重要角色&#xff0c;提供了灵活、经济高效且功能强大的解决方案。以下是一些常用的开源数据治理项目&#xff1a; Apache Atlas&#xff1a; 功能&#xff1a;元数据管理、数…...

数据结构与算法之排序算法-(计数,桶,基数排序)

排序算法是数据结构与算法中最基本的算法之一&#xff0c;其作用就是将一些可以比较大小的数据进行有规律的排序&#xff0c;而想要实现这种排序就拥有很多种方法~ &#x1f4da; 非线性时间比较类&#xff1a; 那么我将通过几篇文章&#xff0c;将排序算法中各种算法细化的&a…...

Word正文中每两个字符之间插入一个英文半角空格

Word正文中每两个字符之间插入一个英文半角空格 修改前 修改后 替换方法 快捷键 Ctrl H 唤出查找和替换界面依次输入上述内容全部替换即可 参考链接 【【2025年3月】计算机二级MS Office 2016 真题讲解视频打卡】 【精准空降到 25:27】...

把 DeepSeek1.5b 部署在显卡小于4G的电脑上

这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好设置Ollama环境变量验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话 调整gpu精度 介绍 Deepseek1.5b能够运行在只用cpu和gpu内…...

A4988一款带转换器和过流保护的 DMOS 微步驱动器的使用方式

A4988是一款带转换器和过流保护的 DMOS 微步驱动器&#xff0c;用于驱动双极步进电动机。它支持全、半、1/4、1/8 及 1/16 步进模式&#xff0c;输出驱动性能可达 35 V 及 2 A。其特点包括简单的步进和方向控制接口、可调电位器调节最大电流输出、自动电流衰减模式检测/选择以及…...

一口井深7米,一只蜗牛从井底往上爬每天爬3米掉下去1米,问几天能爬上井口?

一个井深7米&#xff0c;一只蜗牛从井底往上爬每天爬3米掉下去1米&#xff0c;问几天能爬上井口&#xff1f; 1. 通用解法 构建一个通用的解法&#xff0c;适用于任何井深和蜗牛的爬升、下滑距离。 问题描述&#xff1a; 井深为 H H H 米。蜗牛每天向上爬升 U U U 米。每…...

Asp.Net Core MVC 中级开发教程

Asp.Net Core MVC 中级开发教程 一、Asp.Net Core Mvc 区域使用 ASP.NET Core MVC的Areas使用整理 - 天马3798 - 博客园 二、Asp.Net Core 路径处理 Asp.Net Core Web相对路径、绝对路径整理 Asp.Net Core获取当前上下文对象 三、Asp.Net Core 服务使用和封装 四、Asp.Net …...

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…...

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...