数据结构学习之二叉树

数据结构——树与二叉树学习笔记(一) 数据结构——树与二叉树,记录了与树相关的重要知识点,可作为查阅使用。 文章目录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;
			}
		}
}

 

9 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 快速入门 工业机器视觉 机器视觉 阅读详情

相关推荐

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库:Harbor(使用自签名证书)(超简单搭建私有仓库Harbor-亲测无坑解决K8s私有仓库证书问题的关键在于正确配置容器运行时(本例中是containerd)信任私有仓库的证书。

lzz的博客 2142

二叉树中的中的 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万+

Unipush2.0 App消息推送(在线+离线推送)

使用unipush2.0进行消息推送,包含在线跟离线

weixin_50251467的博客 3700

二叉树的建立与遍历(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万+

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 379

FR4板材实战:用ADS 2023快速设计微带线低通滤波器(附Line-Cal计算技巧)

本文详细介绍了使用ADS 2023在FR4板材上设计1-3GHz微带线低通滤波器的工程技巧。通过Line-Cal工具快速计算微带线参数,解决FR4板材的介质损耗和阻抗匹配问题,提供从集总参数转换到分布参数的实用方法,并分享版图设计与实测验证的关键要点,帮助工程师高效完成射频滤波器设计。

omega的博客 714

二叉树 存储结构

顺序存储: #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

使用R语言中的NbClust包确定最佳聚类簇数

聚类分析是一种常用的数据分析技术,它将相似的数据点分组成不同的簇。NbClust包是R语言中一个强大的工具,它提供了多种方法来帮助我们确定最佳的聚类簇数。综上所述,使用R语言中的NbClust包可以帮助我们确定最佳的聚类簇数。通过选择适当的聚类算法和评估指标,我们可以更好地理解数据集的结构和模式,并根据需要进行进一步的分析和解释。此外,NbClust包还提供了其他函数和参数,用于执行不同的聚类算法、选择不同的评估指标等。安装完毕后,我们需要加载NbClust包,以便使用其中的函数。函数来确定最佳聚类簇数。

2301_79326559的博客 2280

数据结构—线索二叉树

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

m0_51769031的博客 528

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

941

Three 之 three.js (webgl)绘制物体模型尺寸虚线包围框工具简单封装 DashLinesBoxTool

Three js 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。本节介绍, three.js (webgl) 中绘制物体模型尺寸虚线包围框工具简单封装 DashLinesBoxTool,主要是给实物绘制线框,有点像AI 识别正方形包裹框的效果。其中,如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。

仙魁XAN 2106

二叉树实验

数据结构C语言版

aiains的博客 3500

地平线J6的基础简介

地平线J6M芯片:面向中阶辅助驾驶市场的高性价比芯片

weixin_43084908的博客 4466

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

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

唐攀的博客 293

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

唐攀的博客 134

OV9734 DATASHEET,完整规格书

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

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

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

唐攀的博客 836

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

上面的那些内容都是填空题选择题会出的,但是如果是真正了解树是什么样的(并且是那种可以直接写成代码可以在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、付费专栏及课程。

余额充值