数据结构学习之二叉树

数据结构——树与二叉树学习笔记(一) 数据结构——树与二叉树,记录了与树相关的重要知识点,可作为查阅使用。 文章目录1. 树的基本概念1.1 树的概念术语1.2 树的基本性质2. 二叉树的概念2.1 几个特殊的二叉树2.2 二叉树的性质2.3 二叉树的存储结构3. 二叉树的遍历和线索二叉树3.1 递归遍历3.2 非递归遍历3.3 用遍历序列确定二叉树3.4 线索二叉树的构造3.5 线索二叉树的遍历4. 树、森林4.1 树的存储结构4.2 树、森林与二叉树的转换4.3 树/森林的遍历 1. 树的基本概念 1.1 树的概念术语 结点、根、分支、. 阅读详情
1树的存储
#define maxsize 100;
typedef char elemtype;
struct tnode
{elemtype data;
int parent;
};
struct tnode
{
	elemtype data;
	struct tnode parent;
}
struct tnode *p;//树的链式存储
2.二叉树的建立
#define NULL 0
typedef struct btnode
{
	char data;
	struct brnode *lchild,*rchild;
}st;
st *t;			//*t为指向二叉树结点类型的指针
char ch;
int node;
st *create(st *p)
{
	if((ch=getchar())=='#')
		p=NULL;
	else
	{
		p=(st*)malloc (sizeof(st));
		p->data=ch;
		p->lchild=create(p->lchild); 			//递归创建左结点
		p->rchild=create(p->rchild);			//递归创建右结点
		
	}
	return p;				//返回指向二叉树结点的指针
}
3.二叉树的先根遍历
void pretravel(struct btnode *bt)
{
	if(bt!=NULL)
	{
		printf("%2c",bt->data);
		pretravel(bt->lchild);  //递归调用左结点
		pretravel(bt->rchild);	//递归调用右结点
	}
	printf("\n");
}
②先根遍历的非递归实现
#define maxsize 20;
struct bnode
{
	elemtype data;
	struct bnode *lchild,rchild;
};//通过栈实现
struct stack
{
	int top;
	struct bnode *num[maxsize];
};
void pretravel(struct bnode *bt)
{
	struct stack p;
	struct bnode *q;
	q=bt;
	p.top = -1;
	while ((q!=NULL)||p.top!=-1))
		if(q!=NULL)
		{
			printf("%c",q->data);
			if(p.top<maxsize)
			{
				p.top++;
				p.num[p.top]=q;//将指根结点的指针入栈,遍历完左子树后在沿结点遍历右子树。
				q=q->lchild;
			}
			else 
				printf("stack overflow");
		}
		else if (p.top>-1)
		{
			q=p.num[p.top];
			/* 从堆栈中弹出只想上一次遍历过得结点的指针 */
			p.top--;
			q=q->rchild;
		}
}
4.二叉树的中根遍历LDR
递归实现
void intravel(struct btnode *bt)
{
	if(bt!=NULL)
	{
		intravel(bt->lchild);
		printf("%2c",p->data);
		intravel(bt->rchild);
	
	}
	printf("\n")
}
非递归实现
#define maxsize 20
struct bnode{
	datatype data;
	struct bnode *lchild ,rchild;
	
};
struct stack{
	int top;
	struct bnode *num[maxsize];
};
void intravel (struct bnode *bt)
{
	struct stack p;
	struct bnode *q;
	q= bt;
	p.top = -1;
	do{
		while(q!=NULL)
		{
			if(p.top<maxsize)
			{
				p.top++;
				p.num[p.top]=q;
				q=q->lchild;
			}
			else printf("stack overflow\n");
		}
		if(p.top>-1)
		{
			q=p.num[p.top];
			p.top--;
			printf("%c",q->data);
			q=q->rchild;
		}
		while ((p.top==-1)&&(q!=NULL))
	}
}
5.二叉树的后根遍历LRD
void lasttravel(struct btnode *bt)
{
	if(bt!=NULL)
	{
		lasttravel(bt->lchild);
		lasttravel(bt->rchild);
		printf("%2c" ,bt->data);
	}
	printf("\n");
}
非递归实现
#define maxsize 20
struct bnode {
	data;
	struct bnode *lchild,rchild;
	
};
struct stacknum
/* 定义一个指针栈 */
{
	int top1;
	struct bnode *next;
};
struct stack{
	int top;
	struct stacknum num[maxsize];
	
}
void lasttravel(struct bnode *bt)
{
	struct stack s;
	struct stacknum p;
	struct bnode *q;
	q=bt;
	s.top=-1;
	while((q!=NULL)||(s.top!=-1))
		if(q!=NULL)
		{
			p.top1=0;
			p.next=q;
			if(s.top<maxsize) //保留访问过结点的指针,并入栈
			{
				s.top++;
				s.num[s.top]=p;
				q=q->lchild;
			}
			else printf("str=ack overflow\n");
			
		}
		else if (s.top>-1)
		{
			p=s.num[s.top];
			s.top--;
			if(p.top1==0)
			{
				p.top1=1;
				s.top++;
				s.num[s.top]=p;
				q=q->rchild;
			}
			else{
				printf("%c",q->data);
				q=NULL;
			}
		}
}

 

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码) 本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。 阅读详情

相关推荐

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

二叉树中的中的 BiTNode 和*BiTree 是什么,typedef struct BiTNode{ TElemType data; struct BiTNode *lchild

typedef struct BiTNode{     TElemType  data;     struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; 第四行代码中的 BiTNode 和*BiTree 是什么 其实这里让你迷糊的点并不是结构体,而是typedef的使用,耐心的看。 typedef的定义:

xiaoninvhuang的博客 3万+

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

二叉树的建立与遍历(c语言实现)

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef int ElemType; //这里用int 作为树结点的数据 typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; //左右孩子指针 }BiTNode, *BiTree; vo...

欢迎来到我的空间 1万+

骁龙X Elite笔记本重装Windows 11 Arm64系统完整指南与避坑手册

UEFI安全启动和Arm64架构是理解现代计算设备系统部署的基础。UEFI取代传统BIOS,提供了更安全的启动环境和模块化固件接口,而Arm64架构则以其高能效特性,在移动和新兴PC领域日益重要。其技术价值在于为设备带来更快的启动速度、更强的安全防护以及更优的功耗表现。在应用场景上,这直接关系到搭载高通骁龙X Elite等Arm处理器的笔记本电脑的系统安装与维护。对于这类设备,重装系统远非插入通用安装盘那么简单,核心挑战在于必须使用专为Arm64编译的Windows镜像,并需提前集成芯片组、网络等硬件的专属

weixin_33428613的博客 490

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

二叉树 存储结构

顺序存储: #include <stdio.h> #include <math.h> //其中floor()函数为向下(左)取整,ceil()函数为向上(右)取整 #define MaxSize 10 typedef int ElemType; //定义树结点 typedef struct{ ElemType data; bool isEmpty; }TreeNode; //初始化所有结点 void InitTree(TreeNode T[]){

qq_43603281的博客 288

Burp Suite手工验证CORS漏洞的四步闭环法

CORS(跨域资源共享)是Web应用实现跨域通信的基础机制,其安全本质在于服务端对Origin头的校验逻辑与响应头组合的语义一致性。当服务端错误地返回Access-Control-Allow-Origin: *并配合Access-Control-Allow-Credentials: true,或采用弱校验(如字符串包含匹配)时,将导致敏感数据泄露与凭据劫持风险。该漏洞难以被自动化扫描器发现,因其依赖请求上下文、认证状态及动态策略判断。Burp Suite作为核心工具,需通过构造跨域请求、捕获预检响应、交叉验

weixin_30596343的博客 512

数据结构—线索二叉树

无论哪一种序列线索化都不要忘记处理最后一个结点的rchild和rtag;注意先序线索化的死循环问题,当ltag==0的时候才能对左子树先序线索化。 1.2 中序线索二叉树的构造 2、先序线索化 特别注意在先序线索化的过程中,当访问完根节点开始访问其左子树的时候,要判断其左孩子是不是前驱线索,避免出现死循环。 4、中序线索二叉树寻找中序后继 对不含头结点的中序线索二叉树的遍历: 5、中序线索二叉树中寻找中序前驱结点 对不含头结点的线索二叉树逆序遍

m0_51769031的博客 528

史上最详细的sqlmap使用教程

sqlmapsqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等Sqlmap采用了以下5种独特的SQL注入技术基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。

大河之犬的博客 5万+

<IBM DB2>《DB2 官方监控脚本 2022版本》

DB2 监控脚本

Else 的博客 674

二叉树实验

数据结构C语言版

aiains的博客 3500

手把手教你学simulink(43.2)--光伏发电场景示例:基于Simulink开发一个光伏发电系统仿真模型:采用神经网络控制策略进行优化

需求分析光伏发电系统(Photovoltaic System, PV)是将太阳能转换为电能的重要手段,广泛应用于分布式发电、并网发电和离网供电等领域。随着光伏技术的发展,如何提高光伏发电系统的效率和稳定性成为研究的重点。传统的控制策略(如PID控制器)虽然简单易实现,但在复杂工况下(如光照强度变化、温度波动等)难以达到最优性能。因此,引入先进的控制策略,如神经网络控制(Neural Network Control, NNC),可以显著提升系统的响应速度和鲁棒性。

MHD0815的博客 439

数据结构学习7——二叉树的遍历

数据结构学习7——二叉树的遍历 - romi - 博客园 (cnblogs.com)

唐攀的博客 293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数据结构学习6——二叉树的构造

数据结构学习6——二叉树的构造 - romi - 博客园 (cnblogs.com)

唐攀的博客 134

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构学习8——二叉树的销毁

数据结构学习8——二叉树的销毁 - romi - 博客园 (cnblogs.com)

唐攀的博客 836

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据结构学习记录:第六章:树和二叉树

上面的那些内容都是填空题选择题会出的,但是如果是真正了解树是什么样的(并且是那种可以直接写成代码可以在oj上面跑的那种),还是要从二叉树的定义开始。

Everybodynow的博客 770

数据结构学习分享之链式二叉树(一)

二叉树详解

杭电码农-NEO的博客 1191

数据结构与算法学习笔记:二叉树

写在前面:记录学习《恋上数据结构与算法》的过程。 课程链接地址:https://ke.qq.com/course/385223 目录 树形结构 树的基本概念 二叉树(Binary Tree) 二叉树(Binary Tree)的性质 真二叉树(Proper Binary Tree) 满二叉树(Full Binary Tree) 完全二叉树(Complate Binary Tree) 完全二叉树(Complate Binary Tree)的性质 面试题 国外教材概念 树形结构

baidu_41388533的博客 314

Java学习——数据结构——二叉树的遍历

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站 1.为什么需要树这种数据结构 (1) 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。 (2) 链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。 缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 。 (

qq_41853002的博客 424

数据结构学习 --5 树和二叉树

在任意一颗树非空树中应该满足:1 有且仅有一个特定的称为根的结点2 当n>1 时,其余结点为m(m > 0)个互不相交的有限集合t1, t2 …tm,其中每个集合本身又是一颗树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了其自身,树是一种递归的数据结构。

anyhowanywhere的博客 164

Java学习——数据结构——线索化二叉树

学习尚硅谷韩顺平老师的Java数据结构笔记,详情请移步网站 1、引子 问题分析: (1) 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } (2) 但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上. (3) 如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办? (4) 解决方案-线索二叉树 2、基本介绍 (1) n 个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表

qq_41853002的博客 296

数据结构——二叉树的个人学习总结

1.树中结点数等于所有结点的度数+12.度为 m 的树第 i 层至多有m^(i-1)个结点3.高度为 h 的m叉树至多有个结点二、二叉树1、几种不同的二叉树。

Daybreak_OvO的博客 794

数据结构学习:二叉树

向下调整,从最后一个子树开始往前向下调整(一层层调好),保证每次向下调整时左右子树都是堆(向上和向下都是要满足这个条件的,刚刚向上调整也是相当于一层层调成了堆)(n,直觉上市n*logn,用错位相减法证明,直接想的话,因为向下调整忽略最后一层,向上调整忽略第一层,明显数量上差距就很大;根节点一定是最大的,因此让根节点和末尾节点交换,交换后的根节点向下调整,再次将第二大的数置于根节点,同时末尾节点必然不会动(第一大)。先一直走左孩子,当前的左孩子没有孩子时走其右兄弟,走完后再走自己的右兄弟,即可保证走完。

Titan2024的博客 1935

学习笔记—数据结构—二叉树顺序实现(小堆)

1.满二叉树是一种特殊的二叉树,它的特点是每一层的节点数都达到最大值,即每一层的节点数都恰好为2的幂次(除了最后一层以外)。2.如果满二叉树的深度为k,那么它的节点总数为2^k - 1。在满二叉树中,除了最后一层的节点之外,其余每一层的节点都是完全填满的,而且最后一层的节点也是从左到右连续排列的除了最后一层外,其他每一层的节点数都达到最大数量,即该层的节点数等于2的幂减去1。最后一层的节点都集中在最左边,并且右边的节点可以少,但不能有空位。堆是一种特殊的完全二叉树,它可以被视为一种特殊的顺序表。

2401_83231468的博客 929
上一篇: 数据结构学习之 链表
下一篇: 八皇后问题学习 (二叉树与回溯法比较)
杨鼎睿
博客等级 码龄9年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值