完全二叉树基本操作(不含遍历)

/*准备数据*/#define MANLEN 20                //最大长度
typedef char DATA;               //定义元素类型
typedef struct CBT               //定义二叉树结点类型
{DATA data;                   //元素数据struct CBT* left;            //左子树结点指针struct CBT* right;           //右子树结点指针
}CBTType;/*初始化二叉树*/
CBTType* InitTree()             //初始化二叉树的根
{CBTType* node;if (node = (CBTType*)malloc(sizeof(CBTType)))//申请内存{cout << "请输入一个结点的数据: " << endl;cin>> node->data;node->left = NULL;node->right = NULL;if (node != NULL){return node;}else{return NULL;}}return NULL;
}/*添加结点*/void AddTreeNode(CBTType* treeNode)
{CBTType *pnode, *parent;DATA data;char menusel;if (pnode = (CBTType*)malloc(sizeof(CBTType))){cout << "请输入二叉树结点数据: " << endl;fflush(stdin);cin >> pnode->data;pnode->left = NULL;pnode->right = NULL;cout << "请输入该结点的父结点数据: ";fflush(stdin);cin >> data;parent = TreeFindNode(treeNode, data);if (!parent){cout << "未找到父结点!";free(pnode);return;}cout << ("1.添加该结点到左子树\n2.添加该结点到右子树\n");do{menusel = getchar();menusel -= '0';if (menusel == 1 || menusel == 2){if (parent == NULL){cout << "不存在父结点,请先设置父节点!" <<endl;}else{switch (menusel){case 1:if (parent->left){cout << "左子树结点不为空"<<endl;}else{parent->left = pnode;}break;case 2:if (parent->right){cout << "又子树结点不为空" << endl;}else{parent->right = pnode;}break;default:cout << "参数无效" << endl;}}}} while (menusel!=1 && menusel!=2);}
}/*查找结点*/CBTType* TreeFindNode(CBTType* treenode, DATA data)
{CBTType* ptr;if (treenode == NULL){return NULL;}else{if (treenode->data == data){return treenode;}else{if (ptr = TreeFindNode(treenode->left, data)){return ptr;}else if (ptr=TreeFindNode(treenode->right,ENODATA)){return ptr;}else                            //分别向左右子数递归查找{return NULL;}}}
}/*获取左子树*/CBTType* TreeLeftNode(CBTType* treenode)
{if (treenode){return treenode->left;}else{return NULL;}
}/*获取右子树*/CBTType* TreeLeftNode(CBTType* treenode)
{if (treenode){return treenode->right;}else{return NULL;}
}/*判断空树*/int TreeIsEmpty(CBTType* treenose)
{if (treenose){return 0;}else{return 1;}
}/*计算二叉树的深度*/
//计算深度就是就算二叉树中结点最大的层数,往往需要采用递归算法实现int  TreeDepth(CBTType* treenode)
{int depleft, depright;if (treenode == NULL){return 0;}else{depleft = TreeDepth(treenode->left);  //左子树深度(递归调用)depright = TreeDepth(treenode->right); //右子树深度(递归调用)if (depleft > depright){return depleft + 1;}else{return depright + 1;}}
}/*清空二叉树*/
/*使用递归*/void ClearTree(CBTType* treenode)
{if (treenode){ClearTree(treenode->left);     //清空左子树ClearTree(treenode->right);     //清空右子树free(treenode);               //释放当前结点所占内存treenode = NULL;}
}/*显示结点数据*/
//显示结点数据就是显示当前结点的数据void TreeNodeData(CBTType* p)
{cout << p->data << endl;
}
//参数p为带显示的结点

 

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

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

相关文章

1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文

1.0jpa 2.0Java EE 7中的非同步持久性上下文 JPA 2.1引入了非同步持久性上下文的概念&#xff0c;该概念允许对JPA实体管理器的刷新进行细粒度控制&#xff0c;即通过显式调用EntityManager&#xff03;joinTransaction 。 以前&#xff0c;这默认情况下是JTA事务的结束&#x…

算法:删除顺序表中重复的元素

//删除数组中重复的元素 //思路&#xff1a;通过起始位置的元素&#xff0c;逐个和后面的元素进行比较&#xff0c;找到相同的元素后执行删除操作。没有发现执行第二次循环void purge(int a[], int len) {int i 0, j;while (i<len) //从数组开始第一个位置开始循环{j …

设计模式的Java 8 Lambda表达式-策略设计模式

策略模式定义封装在通常称为Context的驱动程序类中的一系列算法&#xff0c;并使这些算法可互换。 它使算法易于互换&#xff0c;并提供了在特定时间选择适当算法的机制。 算法&#xff08;策略&#xff09;在运行时由客户端或上下文选择。 在与客户端交互期间&#xff0c;Con…

调用打印机_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...

以前一直以为打印很简单&#xff0c;不就是编辑好文件按个“打印”就行了&#xff1f;但其实打印过程可以复杂到你分分钟“怀疑人生”。你以为的打印过程可能是这样的 ↓。我们看到的打印过程然而&#xff0c;真正的打印过程是这样的 ↓。实际上的打印过程打印机打印一页文件或…

String大小转换函数

transform(s1.begin(), s1.end(), s1.begin(), toupper); 小写变大写transform(s1.begin(), s1.end(), s1.begin(), tolower); 大写变小写

kite 使用 go_使用Apache Storm和Kite SDK Morphlines的可配置ETL处理

kite 使用 go从我担任软件工程师的第一天起&#xff0c;我总是听到很多方面的相同要求&#xff1a; “ 我们希望所有内容都可配置&#xff0c;我们希望在运行时更改所有内容&#xff0c;我们希望有一个可视化工具来应用所有这些逻辑&#xff0c;以便非开发人员使用和配置我们的…

使用react实现select_使用 Hooks 优化 React 组件

奇技指南本文内容主要是我之前分享的文字版&#xff0c;若想看重点的话可以看之前的Slide: https://ppt.baomitu.com/d/75fc979a本文作者奇舞团前端开发工程师李喆明。需求描述由于作者所在的业务是资讯内容类业务&#xff0c;因而在业务中会经常碰到如下场景&#xff1a;有一个…

Windows内存修改初篇

​ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h>BOOL FindFirst(DWORD dwValue);//对目标进程空间进行查找 BOOL FindNext(DWORD dwValue);//对目标空间进行2&#xff0c;3&#xff0c;4。。查找//查找数据的地址列表 DWORD g_arList…

斐波那契实现阶乘js_功能与命令式编程。 Java 8中的斐波那契,素数和阶乘

斐波那契实现阶乘js有多种编程风格/范例&#xff0c;但是两个著名的风格是Imperative和Functional 。 命令式编程是最主要的范例&#xff0c;因为几乎所有主流语言&#xff08;C &#xff0c;Java&#xff0c;C&#xff03;&#xff09;都在推广它。 但是在最近几年中&#xf…

cacti不能实时刷新流量图_介绍一种编码帧内刷新算法

0.引言本文主要介绍一种帧内刷新算法&#xff0c;解决I帧太大带来的延迟问题&#xff0c;可以在调优时&#xff0c;值得借鉴。帧内刷新技术避免 I 帧尖峰带来的带宽压力&#xff0c;可以有效地降低视频通信中的缓冲区延迟。帧内刷新算法是一种视频错误恢复的方法&#xff0c;通…

python kotlin_Java和Python中类似Kotlin的生成器,续:附加参数

python kotlin介绍 在今天的文章中&#xff0c;我们将继续上周的文章&#xff0c;内容涉及使用Java和Python创建类似Kotlin的构建器&#xff0c;并扩展了构建器API以采用一些可选参数以提高灵活性。 我们继续我们HTML示例&#xff0c;尝试添加标记属性&#xff0c;例如class&am…

按钮自动居中布局_CSS布局技巧

css实现左右布局和居中布局显示是前端进行页面设计的基础&#xff0c;也是全面了解并学习css一个很好的切入点&#xff0c;因为其中会涉及到对许多css基础点的认知。实现css入门&#xff0c;理解左右布局的实现方式是必经之路&#xff0c;同时也能使我们在项目中涉及前端编码的…

jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...

jooq欢迎来到jOOQ Tuesdays系列。 在本系列文章中&#xff0c;我们每隔一个月的第三个星期二发布一篇文章&#xff0c;从jOOQ的角度采访我们发现该行业令人兴奋的人。 这包括从事SQL&#xff0c;Java&#xff0c;开放源代码以及各种其他相关主题的人员。 我们很高兴在第七版中…

多方法接口回调_啊?Java反射遇到接口

本文适合有点Java反射基础的同学&#xff0c;在Java反射调用方法时遇到接口参数是一件很蛋疼的事情。在反射调用方法时需要传参数&#xff0c;像传递基本数据类型进去用就完事&#xff0c;传个对象进去怎么整都没关系&#xff0c;因为你在外部有对象的引用&#xff0c;但 如果需…

0与1世界的初级编程篇之C语言

C语言是一门面向过程的计算机编程语言&#xff0c;与C、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速&#xff0c;工作量小…

swarm部署集群_WildFly Swarm –将Java EE应用程序部署为独立的Jar

swarm部署集群WildFly Swarm提供了一个简单的解决方案&#xff0c;用于将Java EE应用程序部署为独立的Jar文件。 这使得部署应用程序非常容易&#xff0c;尤其是REST或Web服务。 Swarm在这方面与Spring Boot非常相似&#xff0c;因为它可以快速开发Web&#xff08;.War&#xf…

QT 手动创建信号函数 与 槽函数

自定义信号槽必须要有Q_OBJCT 自己通过关键字signals创建信号函数,只声明信号函数即可&#xff0c;系统会自动定义它。 利用 public slots: 声明一个槽函数&#xff0c;槽函数不会自动生成&#xff0c;并且去定义它。

九九乘法表代码口述_利用随机函数实现座次表的随机排座

昨天听完讲座&#xff0c;晚上忍不住写了份学后感&#xff0c;今天有老师在文章下留言问如何实现随机排座&#xff0c;上午在快速理赔中心处理交通事故&#xff0c;处理完后将车开去4S店维修&#xff0c;回来后给娃做完中饭就开始写代码实现这个功能&#xff0c;因为有C功底&am…

jep使用_JEP 277“增强弃用”非常好。 但这是一个更好的选择

jep使用维护API很难。 我们正在维护非常复杂的jOOQ API。 但是就语义版本而言&#xff0c;我们遵循相对宽松的规则 。 当您阅读Brian Goetz和其他人关于在JDK中保持向后兼容性的评论时&#xff0c;我只能对他们的工作表示敬意。 显然&#xff0c;我们都希望最终移除Vector &a…

python 港股交易数据_GitHub - 116pythonZS/futuquant: 富途量化平台 API

FutuQuant - 富途量化投资平台 (Futu Quant Trading API)简介​FutuQuant开源项目可以满足使用富途牛牛软件进行量化投资的需求, 提供包括Python接口、Json接口的行情及交易的API。安装pip install futuquant注: 本API同时兼容Python2和Python3, 推荐安装anaconda环境&#xff…