【笔记】选择题笔记+数据结构笔记

news2024/10/4 23:26:39

文章目录

  • 2014 41
    • 方法一先序遍历
    • 方法二

连通分量是极大连通子图
一个连通图的生成树是一个极小连通子图

无向图的邻接表中,第i个顶点的度为第i个链表中的结点数
邻接表和邻接矩阵对不同的操作各有优势。

最短路径算法:

  1. 单源最短路径
    已知图G=(V,E),我们希望找出从某给定的源结点S∈V到V中每个节点的最短路径
    Dijkstra算法复杂度 O ( n 2 ) O(n^2) O(n2)
  2. 全源最短路径
    任意两个节点之间的最短路径
    Floyd算法复杂度 O ( n 3 ) O(n^3) O(n3)

最小生成树Prim算法和Kruskal算法【O(mlogm)】
相关阅读资料
Prim算法通常以邻接矩阵作为储存结构。

时间复杂度在对数级别的时候,底数数字的改变对于整个时间复杂度没有影响
静态链表方便经常插入和删除

二叉排序树的中序序列才是有序的
二叉排序树左子树上的值均大于根节点的值,右子树的值均小于根节点的值【不仅仅是左孩子和右孩子】
新插入的关键字总是作为叶节点插入,叶节点不一定总是处于最底层
二叉排序树只有删除的是叶节点才能得到与原来一样的二叉排序树

2014 41

二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储,结点结构为:

在这里插入图片描述

其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针,请设计求T的WPL的算法,要求:(1)给出算法的基本设计思想; (2)使用C或C++语言,给出二叉树结点的数据类型定义; (3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。

方法一先序遍历

解决方法:考查二叉树的带权路径长度,二叉树的带权路径长度为每个叶子结点的深度与权值之积的总和,可以使用先序遍历或层次遍历解决问题。

(1)算法的基本设计思想基于先序递归遍历的算法思想是用一个static变量记录wpl,把每个结点的深度作为递归函数的一个参数传递,算法步骤如下:若该结点是叶子结点,那么变量wpl加上该结点的深度与权值之积,若该结点非叶子结点,那么若左子树不为空,对左子树调用递归算法,若右子树不为空,对右子树调用递归算法,深度参数均为本结点的深度参数加一;最后返回计算出的wpl即可。

(2)二叉树结点的数据类型定义如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct BiTiNode
{
int weight;
struct BiTiNode *lchild,*rchild;
}BiTiNode,*BiTree;
/**
二叉树数据结构定义
**/
int WPL(BiTree root){
	return wpl_PreOrder(root,1);
}
int wpl_PreOrder(BiTree root,int deep){
	static int wpl=0;
	//静态变量存储wpl 静态局部变量
	//作用域为这个函数
	
	//若为叶子结点
	if(root->left==NULL&& root->right==NULL)
	wpl+=deep*root->data;

	//若左子树不空,对左子树递归遍历
	if(root->left!=NULL)
		wpl_PreOrder(root->left,deep+1);
	
	//若右子树不空,对右子树进行递归遍历
	if(root->right!=NULL){
		wpl_PreOrder(root->right,deep+1);
	}
	return wpl;
}


在先序遍历的算法中,static 是一个静态变量,只在首次调用函数时声明wpl并赋值为0,以后的递归调用并不会使得wpl为0。考虑到历年真题算法答案通常都直接仅仅由一个函数构成,所以参考答案使用static而不是全局变量。

方法二

(1)算法的基本设计思想基于层次遍历的算法思想是使用队列进行层次遍历,并记录当前的层数,当遍历到叶子结点时,累计wpl;当遍历到非叶子结点时对该结点的把该结点的子树加入队列;当某结点为该层的最后一个结点时,层数自增1; 队列空时遍历结束,返回wpl。
(2)二叉树结点的数据类型定义

int wpl_LevelOrder(BiTree root){
	BiTree q[MaxSize];
	int end1,end2;
	//end1 头指针,end2尾指针
	end1=end2=0;
	//头指针指向队头元素,尾指针指向队尾的后要给元素
	int wpl=0,deep=1;
	//初始化wpl和深度
	BiTree lastNode;
	//lastNode用来记录当前层的最后一个结点
	BiTree newlastNode;
	//newlastNode用来记录下一层的最后一个结点
	lastNode=root;
	//lastNode初始化为根结点
	newlastNode=NULL;
	//newlastNode初始化为空
	q[end2++]=root;
	///根节点入队
	while(end1!=end2){
		//层次遍历
		//若队列不空则循环
		BiTree t = q[end1++];
		//拿出队列中的头一个元素
		if(t->lchild==NULL&&t->rchild==NULL)
		wpl+=deep*t->weight;
		//若为叶子节点,统计wpl
		
		if(t->lchild!=NULL)
		{
		//若非叶子节点把左节点入队
			q[end2++] = t->lchild;
			newlastNode = t->lchild;
		}//并设下一层的最后一个结点为该结点的左节点
		if(t->rchild!=NULL)
		{
			q[end2++]=t->rchild;
			newlastNode=t->rchild;
		}
		if(t==lastNode){
		//结点为本层最后一个结点。更新lastNode;
			lastNode=newlastNode;
			deep+=1;
		}
		
	}
return wpl;
}

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

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

相关文章

深入理解Linux内核网络(二):内核与用户进程的协作

内核在协议栈接收处理完输入包以后&#xff0c;要能通知到用户进程&#xff0c;让用户进程能够收到并处理这些数据。进程和内核配合有很多种方案&#xff0c;第一种是同步阻塞的方案&#xff0c;第二种是多路复用方案。本文以epoll为例 部分内容来源于 《深入理解Linux网络》、…

认知杂谈72《别让梦想只是梦!7步跃过现实高墙的终极攻略!》

内容摘要&#xff1a;         梦想的实现是一场与现实的较量&#xff0c;需要坚持和突破。学习路线图对于掌握技能至关重要&#xff0c;如学编程应从基础语法开始&#xff0c;逐步深入。 面对难题&#xff0c;积极搜索、提问和实践是关键。坚持和专注是成功的核心&#…

《Windows PE》4.1.3 IAT函数地址表

IAT&#xff08;Import Address Table&#xff09;表又称为函数地址表&#xff0c;是Windows可执行文件中的一个重要数据结构&#xff0c;用于存储导入函数的实际入口地址。 在可执行文件中&#xff0c;当一个模块需要调用另一个模块中的函数时&#xff0c;通常会使用导入函数…

十、敌人锁定

方法&#xff1a;通过寻找最近的敌人&#xff0c;使玩家的面朝向始终朝向敌人&#xff0c;进行攻击 1、代码 在这个方法中使用的是局部变量&#xff0c;作为临时声明和引用 public void SetActorAttackRotation() {Enemys GameObject.FindGameObjectsWithTag("Enemy&qu…

机器学习-树模型算法

机器学习-树模型算法 一、Bagging1.1 RF1.2 ET 二、Boosting2.1 GBDT2.2 XGB2.3 LGBM 仅个人笔记使用&#xff0c;感谢点赞关注 一、Bagging 1.1 RF 1.2 ET 二、Boosting 2.1 GBDT 2.2 XGB 2.3 LGBM LightGBM&#xff08;Light Gradient Boosting Machine) 基本算法原理…

2024企业网盘排行榜,十大企业网盘深度评测【part 2】

在当今数字化时代&#xff0c;企业网盘已成为提升工作效率、保障数据安全的重要工具。从Box到腾讯企业网盘&#xff0c;再到Egnyte、Amazon Drive、金山文档&#xff08;WPS&#xff09;和Huddle&#xff0c;每款产品都有其独特的功能和应用场景。然而&#xff0c;在众多选择中…

Spring Boot新闻推荐:实时数据处理

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

简单二叉树的构建及遍历

1.主要函数 #include <stdio.h> #include <stdlib.h> #include <string.h>//创建节点结构体 typedef struct node{char data[16];//节点数据struct node *L;//左节点struct node *R;//右结点}tree,*treeptr;//先序方式创建节点 treeptr create() {char buf[…

idea创建springboot模块

1.点击file->新建->model server url&#xff1a;如果倒数第二个java选项没有11&#xff0c;就把这里改为阿里云的 name&#xff1a;模块名字 location&#xff1a;文件存放的位置 其他的根据图片自行填写 2. 3.验证 如果没有iml文件(不影响&#xff0c;可以不弄)&#…

MongoDB聚合操作及索引底层原理

目录 链接:https://note.youdao.com/ynoteshare/index.html?id=50fdb657a9b06950fa255a82555b44a6&type=note&_time=1727951783296 本节课的内容: 聚合操作: 聚合管道操作: ​编辑 $match 进行文档筛选 ​编辑 将筛选和投影结合使用: ​编辑 多条件匹配: …

20241004给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时永不休眠的步骤

20241004给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时永不休眠的步骤 2024/10/4 19:22 1、 Z:\rk3588s4_3588a12\device\rockchip\common\device.mk ifeq ($(strip $(BOARD_HAVE_BLUETOOTH_RTK)), true) include hardware/realtek/rtkbt/rtkbt.mk endif ifeq ($(str…

YouTube音视频合并批处理基于 FFmpeg的

专门针对YouTube高品质分享处理的&#xff0c;将音频和视频合并。 首先下载ffmpeg.exe网上随便下载。 echo off title YouTube 音视频合并 20241004 echo 作者&#xff1a;xiaoshen echo 网站&#xff1a;http://www.xiaoshen.cn/ echo. set /p audio请将【音频】文件拖拽到此…

⌈ 传知代码 ⌋ 将一致性正则化用于弱监督学习

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

什么是 NVIDIA 机密计算?( 上篇 )

什么是机密计算? 文章目录 前言1. 机密计算定义2. 机密计算有何独特之处?3. 机密计算是如何得名的4. 机密计算的工作原理是什么?5. 缩小安全边界6. 机密计算的使用案例7. 机密计算如何发展8. 加速机密计算9. 机密计算的下一步前言 机密计算是一种在计算机处理器的受保护区域…

全网最详细kubernetes中的资源

1、资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务。 所谓的部署服务&#xff0c;其实就是在kubernetes集群中运行一个个的…

csp-j模拟三补题报告

前言 今天题难&#xff0c;排名没进前十 &#xff08;“关于二进制中一的个数的研究与规律”这篇文章正在写&#xff09; 第一题 三个&#xff08;three&#xff09; 我的代码&#xff08;AC&#xff09; #include<bits/stdc.h> #define ll long long using namespac…

快停止这种使用U盘的行为!

前言 现在各行各业的小伙伴基本上都需要用电脑来办公了&#xff0c;你敢说你不需要用电脑办公&#xff1f; 啊哈哈哈&#xff0c;用iPad或者手机办公的也算。 有些小伙伴可能经常996&#xff0c;甚至有时候都是007。有时候到了下班时间&#xff0c;工作还没做完&#xff0c;…

Python技巧:如何处理未完成的函数

一、问题的提出 写代码的时候&#xff0c;我们有时候会给某些未完成的函数预留一个空位&#xff0c;等以后有时间再写具体内容。通常&#xff0c;大家会用 pass 或者 ... &#xff08;省略号&#xff09;来占位。这种方法虽然能让代码暂时不报错&#xff0c;但可能在调试的时候…

精准翻译神器:英汉互译软件的卓越表现

英文作为目前世界上使用最广的一种语言&#xff0c;是的很多先进的科学文献或者一些大厂产品的说明书都有英文的版本。为了方便我们的阅读和学习&#xff0c;现在有不少支持翻译英汉互译的工具&#xff0c;今天我们就一起来讨论一下吧。 1.福昕中英在线翻译 链接直达>>…

二叉树的前序遍历——非递归版本

1.题目解析 题目来源&#xff1a;144.二叉树的前序遍历——力扣 测试用例 2.算法原理 前序遍历&#xff1a; 按照根节点->左子树->右子树的顺序遍历二叉树 二叉树的前序遍历递归版本十分简单&#xff0c;但是如果树的深度很深会有栈溢出的风险&#xff0c;这里的非递归…