- #include <iostream>
- #include <string>
- //using namespace std;
- int n=0,dep1=0,dep2=0,m=0,n1=0,n2=0;
- template <class T>
- struct BiNode //二叉树的结点结构
- {
- T data;
- BiNode<T> *lchild, *rchild;
- };
- template <class T>
- class BiTree
- {
- public:
- BiTree() {root=NULL;}
- BiTree(T ch); //构造函数,初始化一棵二叉树,其前序序列由键盘输入
- ~BiTree(void); //析构函数,释放二叉链表中各结点的存储空间
- BiNode<T>* Getroot(); //获得指向根结点的指针
- void PreOrder(BiNode<T> *root); //前序遍历二叉树
- void InOrder(BiNode<T> *root); //中序遍历二叉树
- void PostOrder(BiNode<T> *root); //后序遍历二叉树
- void LeverOrder(BiNode<T> *root); //层序遍历二叉树
- int Count(BiNode<T> *root);//计算结点个数
- int Depth(BiNode<T> *root);//计算深度
- int leafnum(BiNode<T> *root);//叶子节点个数
- int full(BiNode<T> *root);
- private:
- BiNode<T> *root; //指向根结点的头指针
- BiNode<T> *Creat(T ch); //有参构造函数调用
- void Release(BiNode<T> *root); //析构函数调用
- };
- template<class T>
- BiTree<T>::BiTree(T ch)
- { cout<<"请输入创建一棵二叉树的结点数据"<<endl;
- this->root = Creat(ch);
- }
- template <class T>
- BiNode<T>* BiTree<T>::Creat(T ch)
- {
- BiNode<T>* root;
- //T ch;
- //cout<<"请输入创建一棵二叉树的结点数据"<<endl;
- cin>>ch;
- if (ch=="#") root = NULL;
- else{
- root = new BiNode<T>; //生成一个结点
- root->data=ch;
- root->lchild = Creat(ch); //递归建立左子树
- root->rchild = Creat(ch); //递归建立右子树
- }
- return root;
- }
- template<class T>
- BiTree<T>::~BiTree(void)
- {
- Release(root);
- }
- template<class T>
- BiNode<T>* BiTree<T>::Getroot( )
- {
- return root;
- }
- template<class T>
- void BiTree<T>::PreOrder(BiNode<T> *root)
- {
- if(root==NULL) return;
- else{
- cout<<root->data<<" ";
- PreOrder(root->lchild);
- PreOrder(root->rchild);
- }
- }
- template <class T>
- void BiTree<T>::InOrder (BiNode<T> *root)
- {
- if (root==NULL) return; //递归调用的结束条件
- else{
- InOrder(root->lchild); //中序递归遍历root的左子树
- cout<<root->data<<" "; //访问根结点的数据域
- InOrder(root->rchild); //中序递归遍历root的右子树
- }
- }
- template <class T>
- void BiTree<T>::PostOrder(BiNode<T> *root)
- {
- if (root==NULL) return; //递归调用的结束条件
- else{
- PostOrder(root->lchild); //后序递归遍历root的左子树
- PostOrder(root->rchild); //后序递归遍历root的右子树
- cout<<root->data<<" "; //访问根结点的数据域
- }
- }
- template <class T>
- void BiTree<T>::LeverOrder(BiNode<T> *root)
- {
- const int MaxSize = 100;
- int front = 0;
- int rear = 0; //采用顺序队列,并假定不会发生上溢
- BiNode<T>* Q[MaxSize];
- BiNode<T>* q;
- if (root==NULL) return;
- else{
- Q[rear++] = root;
- while (front != rear)
- {
- q = Q[front++];
- cout<<q->data<<" ";
- if (q->lchild != NULL) Q[rear++] = q->lchild;
- if (q->rchild != NULL) Q[rear++] = q->rchild;
- }
- }
- }
- template<class T>
- void BiTree<T>::Release(BiNode<T>* root)
- {
- if (root != NULL){
- Release(root->lchild); //释放左子树
- Release(root->rchild); //释放右子树
- delete root;
- }
- }
- template<class T>
- int BiTree<T>::Count(BiNode<T> *root)
- {
- if(root==NULL) return 0;
- else
- {
- Count(root->lchild);
- Count(root->rchild);
- n++;
- }
- return n;
- }
- template <class T>
- int BiTree<T>::Depth(BiNode<T> *root)
- {
- if (root==NULL) return 0;
- else
- {
- dep1=Depth(root->lchild);//计算左子树深度
- dep2=Depth(root->rchild);//计算右子树深度
- if(dep1>dep2) return dep1+1;
- else return dep2+1;
- }
- }
- template <class T>
- int BiTree<T>::leafnum(BiNode<T> *root)//叶子节点个数
- {
- if(root==NULL) return 0;
- else
- {
- if(root->lchild==NULL && root->rchild==NULL)
- m++;
- leafnum(root->lchild);
- leafnum(root->rchild);
- }
- return m;
- }
- template <class T>
- int BiTree<T>::full(BiNode<T> *root)
- {
- if(root==NULL) return 0;
- else
- {
- if(root->lchild==NULL && root->rchild==NULL)
- return 1;
- else if (root->lchild==NULL || root->rchild==NULL)
- return 0;
- else return(full(root->lchild) && full(root->rchild));
- }
- }
相关推荐
UM2 3D 打印机 DIY 实践 (2) 电路篇
涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC .
数据结构学习
1.找出树中所有权值为负数的结点(t为指向根结点的指针) int sum = 0; void count(Tree t){ if(t == NULL){ return ; }else{ if(t.value < 0){ sum ++; } count(t->left); count(t->right) } } 2. 二叉树转换为森林 假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。 1.从根节点开始,若右孩子存在,则把与右
非线性功率放大器对QAM传输BER性能的影响及补偿
1、线性功率放大器对传输性能的影响 为表述非线性功率放大器对传输性能的影响,以Saleh模型进行观察。具体来说,在QAM调制器之后添加一个非线性模块,使调制后的波形经历AM / AM和AM / PM转换。 在Saleh模型中,转换用四个参数表示,即AM / AM转换为????a和????a,AM / PM转换为????p和????p。 在Saleh模型中,AM / AM和AM / PM方程以输入电压u的大小表示为: 式中,FAM / AM是AM / AM转换的输出电压与输入电压的关系,而FAM
二叉树的性质和常用操作代码集合
二叉树的性质和常用操作代码集合性质: 二叉树的性质和常用代码操作集合 性质1:在二叉树的第i层上至多有2^i-1个结点 性质2:深度为k的二叉树至多有2^k - 1个结点 性质3:对任意一棵二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0 = n2 + 1 满二叉树:深度为k且有2^-1个结点的树 完全二叉树:深度为k,结点数为n的二叉树,如果其结点1
别再为电路自激发愁了:手把手教你用吸波材料搞定微波腔体谐振(附HFSS仿真设置)
本文详细解析了微波腔体谐振问题的工程解决方案,重点介绍了吸波材料的选型、安装工艺及HFSS仿真设置。通过实际案例和计算工具,帮助射频工程师有效抑制腔体自激,提升系统稳定性。特别适用于35GHz毫米波雷达等高频电路设计场景。
企业级AI项目落地实战指南
企业级 AI 项目落地需构建“分阶段实施 + 多维度风控”的双轮驱动体系:实施端通过 POC 验证技术可行性、试点建立评估标准、规模化实现价值复制,各阶段需结合行业案例(如东阳光药、旺盈集团)提炼可复用经验;风险端则需覆盖技术(数据安全、模型稳定性)、合规(全球监管动态)、组织(人才与文化)维度,通过工具化框架(AI TRISM)与案例策略(邮储银行可解释性设计、拓斯达培训体系)实现风险可控。最终通过“场景聚焦 - 合规嵌入 - 持续优化”的循环机制,实现 AI 技术从“试点成功”到“全面价值创造”的跨越。
《链式二叉树常用操作全解析》
本文介绍了链式二叉树的常见操作实现,包括:1. 计算节点总数(递归累加);2. 统计叶子节点数量(识别无子节点);3. 计算第k层节点数(递归降层);4. 求树深度(取左右子树最大深度+1);5. 查找指定值节点(前序遍历);6. 销毁树结构(后序遍历释放)。所有操作均采用递归实现,时间复杂度O(n),空间复杂度O(h)。测试用例验证了各功能的正确性,体现了二叉树操作的递归特性和分治思想。
加权余量法求解偏微分方程
加权余量法(Weighted Residual Method)是一种数值方法,用于求解偏微分方程(PDEs)。其基本思想是将偏微分方程的残差(或余量)通过加权函数加权,并使加权余量在定义域上为零,从而形成一组代数方程进行求解。
二叉树的常用操作
二叉树的构建: 递归构建 层次构建 二叉树的遍历 先序遍历 后序遍历 中序遍历 深度 最大深度 (递归、层次遍历) 最小深度 (广度优先搜索) 节点统计 总节点数 叶子节点数 /* 10 6 14 0 0 12 16 8 0 0 0 0 0 3 9 20 0 0 15 7 0 0 0 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 0 */ #include <io...
乐企增值税及附加税费预缴申报表填报能力说明文档V1.004
申报表填报,是指企业在自有业务系统中将算税结果数据按预填规则要求加工汇总后,进行申报表填报的过程。申报表填报前对纳税申报所需的前提条件进行校验。校验通过后,应用前序算税结果数据及预填规则进行纳税申报表预填,生成申报表数据。申报表数据通过申报业务规则校验后,经纳税人确认即完成申报表填报业务。
SAP CPI 和 PO 的区别
SAP CPI适合云集成轻量级的集成需求,并且由于其云架构,具有快速部署低维护高度可扩展的特点。SAP PO更适合本地系统集成复杂的集成场景和高度定制化的需求,并且对于已经有 SAP 基础设施的企业来说,PO 提供了更多的控制和灵活性。选择使用哪个平台通常取决于企业的技术架构、集成需求、预算以及对灵活性和控制的需求。如果企业主要使用 SAP 的本地系统,并且有复杂的集成需求,那么 SAP PO 是一个理想的选择。如果企业更多地依赖云应用,并希望简化集成操作,那么 SAP CPI 更加适合。
数据结构-二叉树常用操作集合
【代码】数据结构-二叉树常用操作集合。
万字长文,YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务
YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务
二叉树的定义及常用操作
二叉树的结点记录当前节点的值,还有两个指针域分别指向两个子结点;而通过一个结点的指针来表示创建二叉树的根结点,通过两个指针域的遍历可以得到整棵二叉树的值//1.结构定义//节点int val;//值域//两个指针域,分别指向左右两个节点Tree表示的是树的根节点。
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
二叉树的常用操作(创建、先中后序递归与非递归遍历、层序遍历)
编译环境IDE: codeblocksCompiler: GNU GCC#include #include #include #include //#include //#define _DEBUG_CODE //输出调试过程中变量的值 //#define _DEBUG_CODE_STACK //测试栈 //#define _DEBUG_CODE_QUEUE //测试队列 using namespace std; typedef struct BiTNode { //二
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
de风——二叉树常用操作你掌握了多少?
本文系统讲解了二叉树的核心操作,包括前序、中序、后序遍历的实现,节点统计方法,查找算法,以及通过前序数组构建二叉树和判断完全二叉树等。通过递归分治和层序队列两种核心思想,配合详细的代码示例和图解,完整展示了二叉树的基础操作流程。文章使用统一的示例二叉树贯穿始终,帮助读者直观理解每个操作的具体执行过程,最后提供了可直接运行的完整测试代码,是掌握二叉树基础知识的实用指南。
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
【数据结构】二叉树常用操作(Java实现)
文章目录二叉树二叉树的定义二叉树的实现二叉树的操作遍历先根遍历(Pre Order)中根遍历(In Order)后根遍历(Post Order)层次遍历(Level Traverse)常用操作创建清空判断是否为空求最大深度(高度)求最小深度求所有节点数求叶子节点个数求第k层节点数返回某节点的父亲节点查找节点判断两棵二叉树是否相等判断两棵二叉树是否镜像判断是否为完全二叉树翻转二叉树(镜像二叉树)判断是否是二叉查找树判断是否是平衡二叉树 二叉树 二叉树的定义 二叉树(Binary Tree) 二叉树(Binar
二叉树的常用操作函数
二叉树的常用操作函数 未完待续。。。 /*包含二叉树常用操作函数*/ /*未完待续...*/ tree *creat(tree *root) // 以一个字符串为例 构建二叉树 { if (str[cnt] == ',') // 此字符串为全局 { cnt++; // 计数的全局变量 return NULL; } root...
C++实现二叉树的常用操作
C++实现二叉树的常用操作
3601



被折叠的 条评论
为什么被折叠?



