二叉树的一系列操作

【计算机组成原理】实验4:单周期CPU(Verilog)中海大 【计算机组成原理】实验4:单周期CPU 阅读详情

BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi)
{
if (a[pi] != ‘#’)
{
BTNode
root=(BTNode*)malloc(sizeof(BTNode));
root->_data = a[*pi];
++(*pi);
root->_left=BinaryTreeCreate(a,n,pi);
++(*pi);
root->_right = BinaryTreeCreate(a, n, pi);
return root;
}
else
{
return NULL;
}
}

// 二叉树销毁
void BinaryTreeDestory(BTNode** root)
{
if ((root) == NULL)
{
return;
}
BinaryTreeDestory(&((root)->_left));
BinaryTreeDestory(&((root)->_right));
free(root);
root = NULL;
}
// 二叉树节点个数
int BinaryTreeSize(BTNode
root)
{
if (root == NULL)
return 0;
return BinaryTreeSize(root->_left) + BinaryTreeSize(root->_right)+1;
}
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode
root)
{
if (root == NULL)
return 0;
if (root->_left == NULL && root->_right == NULL)
return 1;
return BinaryTreeLeafSize(root->_left)+BinaryTreeLeafSize(root->_right);
}
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode
root, int k)
{
if (root == NULL||k<1)
return 0;
if (k == 1)
return 1;
return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);
}
// 二叉树查找值为x的节点
BTNode
BinaryTreeFind(BTNode* root, BTDataType x)
{
if (root == NULL)
return NULL;
if (root->_data == x)
return root;
BTNode* ret=BinaryTreeFind(root->_left, x);
if (ret)
return ret;
BinaryTreeFind(root->_right, x);
}
// 二叉树前序遍历
void BinaryTreePrevOrder(BTNode* root)
{
stack<BTNode*>sk;
while (root || !sk.empty())
{
if (root)
{
cout << root->_data;
sk.push(root);
root = root->_left;
}
else
{
root = sk.top();
sk.pop();
root = root->_right;
}
}
}
// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root)
{
stack<BTNode*>sk;
while (root || !sk.empty())
{
if (root)
{
sk.push(root);
root = root->_left;
}
else
{
root = sk.top();
sk.pop();
cout << root->_data;
root = root->_right;
}
}
}
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{
stack<BTNode*>sk;
BTNode* top=NULL;
BTNode* prev = NULL;
while (root || !sk.empty())
{
if (root)
{
sk.push(root);
root=root->_left;
}
else
{
root = sk.top();
if (root->_right== NULL || root->_right == prev)
{
cout << root->_data;
sk.pop();
prev = root;
root = NULL;
}
else
root = root->_right;
}
}
}
// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{
queue<BTNode*>qu;
if (root == NULL)
return;
qu.push(root);
while (!qu.empty())
{
root = qu.front();
qu.pop();
cout << root->_data;
if (root->_left)
qu.push(root->_left);
if (root->_right)
qu.push(root->_right);
}
}
// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root)
{
queue<BTNode*>que;
que.push(root);
while (!que.empty())
{
root = que.front();
que.pop();
if (root)
{
que.push(root->_left);
que.push(root->_right);
}
else
{
while (!que.empty())
{
if (que.front() != NULL)
return 0;
que.pop();
}
return 1;
}
}
}

Google Play上架:谷歌2024年5月份审核政策改动,审核强度逐步提升 阅读详情

相关推荐

【实战分享】构建企业级RAG(Retrieval-Augmented Generation)知识库的全面实践

大模型指的是训练参数量极其庞大的深度学习模型,如GPT-3、GPT-4等。这些模型能够通过海量的数据学习,具备强大的语言理解和生成能力。在问答系统中,大模型能够理解用户提出的问题,并生成相关的回答。"""添加文档向量"""pass"""相似度检索"""pass"""获取页面分段"""passMilvus是一个开源的向量数据库,专为高效的向量存储和检索设计。Milvus支持多种索引方式(如IVF、HNSW等),并提供高效的查询和检索功能。索引构建:Milvus通过创建索引加速查询速度。

后端研发工程师Marion的博客 5927

数据结构和算法系列14 二叉树

歇了几天了,没有写博客。从今天开始要总结树和二叉树了。那么什么是树呢? 1,树的定义: 1)有且仅有一个特定的称为根Root的结点。 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每个集合本身又是一个棵树,并称为根的子树。 2,树的表示方法: 最常见的是树形表示法和广义表表示法,下面是树形表示法,如图所示。 上图的广义表表示法为:(A(B(...

weixin_30914981的博客 818

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2622

二叉树的实现

二叉树是数据结构中一种相当重要的结构,对于日后的学习和我们对数据结构认识的提升都有着举足轻重的作用,今天我就带大家来一起学习一下二叉树。首先学习一种数据结构,我们要首先认识一下对应数据结构的节点内容,对于二叉树来说,首先应该包含一下节点对应的数据本身,接着的话,二叉树应该有两个子树的地址,那一共应该是有三个元素,我们可以先把这一部分写出来。

boksram的博客 106

【Matlab深度学习】GPU加速实战:从环境配置到性能优化

本文详细介绍了如何在Matlab中为深度学习任务配置GPU加速环境并进行性能优化。文章从GPU加速的必要性讲起,手把手指导安装NVIDIA驱动、CUDA和cuDNN核心三件套,并验证环境。重点讲解了如何利用gpuArray将数据和模型迁移至GPU,以及通过内存优化、计算优化和多GPU并行等策略充分释放GPU算力,大幅缩短深度学习模型的训练时间。

weixin_29061465的博客 491

[苹果开发者账号]03 申请APPID、苹果开发者账号 常见问题整理

目录:问题持续更新问题一:提示:抱歉,您暂时不能注册问题二:Apple Developer Support提示:联系我们以继续流程 问题一:提示:抱歉,您暂时不能注册 申请苹果开发者账号,应该先注册AppleID,由于很多都是申请的公司使用的苹果开发者账号。一般操作申请动作的人,可能是新手操作,也可能图方便,有些信息会随便填写。 有些人会把姓名填写为,公司的产品、简称、缩写等等。这是不对的。 还有出生日期也会随便乱填。生日如果填写的不对,会被苹果限制使用一些功能的(苹果给的提示不是太明确)。 当生日填写的

专注于技术开发、项目管理 1万+

二叉树实现的相关函数

满二叉树的特性就是层序遍历的情况下,出现一次结点为空以后,就不会再有结点不为空的情况,此处用count=1表示第一次遇到结点为空,此后存在两种情况,一种是后面的结点全是空,最后队列为空退出,此时是满二叉树。形参中BTDataType* a是自定义类型的数组,用与给二叉树的结点赋值,int n是数组元素的个数,int*pi是当前将要放入二叉树的元素的下标。对于结点为空的判断和对层的判断先后顺序不能修改,因为可能会有k==1的时候是空结点的情况,此时不应该加1.(即k=2的时候恰好是叶子结点的情况)

yyssas的博客 635

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

二叉树的一系列基本操作

#include #include #include #include using namespace std; #define MaxSize 50 typedef char ElemType; typedef struct node {     ElemType data;     struct node *lchild;     struct node

GlassySky的博客 362

深入解析i2cdetect:从基础命令到高级读写操作

本文深入解析Linux下i2cdetect工具,从基础安装、总线扫描到高级读写操作。作为i2c-tools的核心组件,i2cdetect是硬件调试的得力侦探,能快速识别I2C总线上的设备地址。文章还涵盖了i2cdump、i2cset、i2cget等进阶工具,并介绍了如何在C程序中调用读写接口进行嵌入式开发,是掌握I2C通信调试的实用指南。

weixin_29189987的博客 372

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4735

二叉树的一系列操作(**)

Btree.h 先定义树的节点: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){} }; struct Btree { TreeNode *root; public: void buildTree(vector<int>&a); void Layerorder(TreeNode *root);//层序遍历

alisteryuer的博客 280

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

二叉树一系列操作

1 创建:这里采用先序遍历的方式void creat(tree *&amp;p){ char x; cin&gt;&gt;x ; if(x =='#')return ; else p=new tree; p-&gt;data =x; p-&gt;left =NULL; p-&gt;right =NULL; creat(p-&gt;left ); creat(p-&gt;right );}2 利用先...

umalaka的博客 278

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

有关二叉树的一系列操作

#include &amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;lt;stdlib.h&amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;a

轻船的博客 190

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【数据结构】扩展先序序列建立二叉树以及对二叉树的一系列操作

题目要求 输入二叉树的扩展先序序列,以二叉链表作为存储结构,建立二叉树。 输出这棵二叉树的先序、中序和后序遍历序列,其中后序遍历使用非递归算法实现。 统计二叉树中非叶子结点的个数。 计算二叉树的高度。 非递归后序遍历二叉树思路   在后序遍历中,左、右子树均访问完成后,从右子树返回时,上一层结点才能退栈并被访问。那么,当从子树返回时,如何判断是从左子树返回还是从右子树返回,进而确定栈顶的上一层结点是否应出栈。   其中一种方法是,每个结点入栈时设置一个标记位flag同时入栈,进入左子树访问时,令flag

CCH²¹的博客 9161

C语言实现二叉树的创建及一系列操作

话不多说直接上代码: 在这里插入代码片 关于程序中使用到的几个函数: 清除标准输入设备(一般是键盘)的缓存。 scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。 ① 遇空格、“回车”、“跳格”键。 ② 遇宽度结束。 ③ 遇非法输入。 键盘缓冲区就可能有残余信息问题。 scanf()函数...

itsfine的博客 1967

二叉树的一系列操作(js)

//对二叉树数据结构的学习,以及js语言完成简单功能实现 <!doctype html> <html> <head> <title>二叉树</title> </head> <body> <scrip...

qq_36872856的博客 223

平衡二叉树的一系列操作:删除、插入(在二叉排序树中插入新结点后,如何保持平衡)、调整平衡等等等

平衡二叉树(Balanced Binary Tree),简称平衡树(AVL树):树上任一结点的左子树和右子树的高度之差不超过1。 结点的平衡因子=右子树高-左子树高。 平衡二叉树结点的平衡因子的值只可能是−1、0或1。

qq_44423388的博客 1151

树的术语、二叉树的性质、二叉树的基本操作总结

一、树的术语 序号 术语 概念 1 结点 包含一个数据元素及若干指向其子树的分支。在树的图形表示中为一个圆圈。 2 孩子(Child) 结点的子树的根,称为该结点的孩子 3 兄弟(Sibling) 同一个双亲的孩子之间互称为兄弟。 4 堂兄弟 其双亲在同一层

学习ing......... 632

二叉树的基本操作

BuyTreeNode用来创建新节点,BinaryTreeCreate用来创建整个树,并返回根节点,传入数组a和一个用来控制下标的pi,pi初始是0,如果K为1表示当前节点是第K层的节点,返回1,否则返回左子树和右子树的第K-1层的节点数。如果当前节点是要查找的,直接返回,不然就向左子树和右子树找,返回找到的节点,找不到返回空。从某个节点到其最远叶节点的路径上的节点数称为该节点的高度。从根节点到某个节点的唯一路径上的节点数称为该节点的深度。没有子节点的节点称为叶节点,它们位于二叉树的末端。

MindbniM的博客 632

头歌 二叉树的二叉链表存储及基本操作

【代码】头歌 二叉树的二叉链表存储及基本操作。

lmq886的博客 7452

算法基础11 —— 树入门(二叉树的遍历以及构造 + 普通树转换成二叉树 + 例题 + 二叉树的一些操作)

字符二叉树的遍历 对于以上二叉树 先序遍历为(根左右) : ABCDEFG 中序遍历为(左根右) : CBEDAFG 后序遍历为(左右根) : CEDBGFA 层序遍历:(从左往右、从上往下) ABFCDGE 以先序次序输入以上二叉树: ABC##DE###F#G## 代码实现遍历操作: #include <iostream> #include <queue> using namespace std; typedef struct node { char data;

smallrain6的博客 3153

二叉树经典14题——初学二叉树必会的简单题

二叉树经典14题

花想云的博客 2215

OpenJudge: 二叉树的操作

总时间限制:1000ms 内存限制:65535kB 描述 给定一棵二叉树,在二叉树上执行两个操作: 1. 节点交换 把二叉树的两个节点交换。 2. 前驱询问 询问二叉树的一个节点对应的子树最左边的节点。 输入 第一行输出一个整数t(t <= 100),代表测试数据的组数。 对于每组测试数据,第一行输入两个整数n m,n代表二叉树节点的个数,m代表操作的次数。 随后输入n行,每行包含3个整数X Y Z,对应二叉树一个节点的信息。X表示节点的标识,Y表示其左孩子的标识,Z表示其右...

weixin_42069359的博客 515

二叉树实验

数据结构C语言版

aiains的博客 3500
上一篇: heap_sort
下一篇: c语言实现能量条小程序
ldbite
博客等级 码龄7年 17粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值