二叉树的构造及求解二叉树高度

article/2025/9/18 1:51:21

题目描述

1、参考题目解释构造一棵二叉树;
2、求解二叉树的高度
3、有余力同学尝试打印这棵二叉树(以树的形态,非必须)

输入

A(B(E,C(D(F(,G),),)

输出

二叉树高度为: 6

代码实现

#include <iostream>
//#include <malloc.h>
#include <stdlib.h>
#define MaxSize 100
using namespace std;typedef char ElemType;
typedef struct node
{ElemType data;  //数据元素struct node *lchild;    //指向左孩子结点struct node *rchild;    //指向右孩子结点
}BTNode;    //声明二叉树结点的类型//创建二叉树
void CreateBTree(BTNode *&b, char *str)
{BTNode *St[MaxSize], *p;int top = -1, k, j=0;char ch;b = NULL;   //建立的二叉树初始为空ch = str[j];while(ch != '\0') //str未扫描时完循环{switch(ch){case '(' :  //开始处理左子树top++;St[top] = p;k = 1;break;case ')':top--;break;  //子树处理完毕case ',':   //开始处理右子树k = 2;break;default:p = (BTNode *)malloc(sizeof(BTNode));p->data = ch;p->lchild = p->rchild = NULL;if(b == NULL)       //若b为空, p置位二叉树的根节点{b = p;}else                //已建立二叉树的根节点{switch(k){case 1:St[top]->lchild = p;break;case 2:St[top]->rchild = p;break;}}}j++;ch = str[j];}}//销毁二叉树
void DestroyBTree(BTNode *&b)
{if(b != NULL){DestroyBTree(b->lchild);DestroyBTree(b->rchild);free(b);}}//查找值为x的结点
BTNode *FindNode(BTNode *b, ElemType x)
{BTNode *p;if(b == NULL){return NULL;}else if(b->data == x){return b;}else{p = FindNode(b->lchild, x);if(p != NULL)return p;elsereturn FindNode(b->rchild, x);}
}//返回p结点的左孩子结点指针
BTNode *LchildNode(BTNode *p)
{return p->lchild;
}//返回p结点的右孩子结点指针
BTNode *RchildNode(BTNode *p)
{return p->rchild;
}//求二叉树的高度
int BTHeight(BTNode *b)
{int lchild, rchild;if(b == NULL){return(0);}else{lchild = BTHeight(b->lchild);rchild = BTHeight(b->rchild);return (lchild > rchild)? (lchild + 1):(rchild + 1);}
}//以括号表示法输出二叉树
void DispBTree(BTNode *b)
{if(b != NULL){cout<<b->data;if(b->lchild != NULL || b->rchild != NULL){cout<<"(";          //有孩子节点时才输出(DispBTree(b->lchild);   //递归处理左子树if(b->rchild != NULL){cout<<",";             //有右孩子结点时才输出,}DispBTree(b->rchild);    //递归处理右子树cout<<")";                //有孩子结点时才输出}}
}int main()
{BTNode *b, *p, *lp, *rp;//从控制台输入二叉树char *str;str = (char *)malloc(20*sizeof(char));cin>>str;CreateBTree(b, str);cout<<"输出二叉树";DispBTree(b);cout<<endl;cout<<"二叉树高度为: "<<BTHeight(b);free(p);DestroyBTree(b);return 0;
}
#include <iostream>
//#include <malloc.h>
//#include <stdlib.h>
#define MaxSize 100
using namespace std;typedef char ElemType;
typedef struct node
{ElemType data;  //数据元素struct node *lchild;    //指向左孩子结点struct node *rchild;    //指向右孩子结点
}BTNode;    //声明二叉树结点的类型//创建二叉树
void CreateBTree(BTNode *&b, char *str)
{BTNode *St[MaxSize], *p;int top = -1, k, j=0;char ch;b = NULL;   //建立的二叉树初始为空ch = str[j];while(ch != '\0') //str未扫描时完循环{switch(ch){case '(' :  //开始处理左子树top++;St[top] = p;k = 1;break;case ')':top--;break;  //子树处理完毕case ',':   //开始处理右子树k = 2;break;default:p = (BTNode *)malloc(sizeof(BTNode));p->data = ch;p->lchild = p->rchild = NULL;if(b == NULL)       //若b为空, p置位二叉树的根节点{b = p;}else                //已建立二叉树的根节点{switch(k){case 1:St[top]->lchild = p;break;case 2:St[top]->rchild = p;break;}}}j++;ch = str[j];}}//销毁二叉树
void DestroyBTree(BTNode *&b)
{if(b != NULL){DestroyBTree(b->lchild);DestroyBTree(b->rchild);free(b);}}BTNode *FindNode(BTNode *b, ElemType x)
{}//求二叉树的高度
int BTHeight(BTNode *b)
{int lchild, rchild;if(b == NULL){return(0);}else{lchild = BTHeight(b->lchild);rchild = BTHeight(b->rchild);return (lchild > rchild)? (lchild + 1):(rchild + 1);}
}//以括号表示法输出二叉树
void DispBTree(BTNode *b)
{if(b != NULL){cout<<b->data;if(b->lchild != NULL || b->rchild != NULL){cout<<"(";          //有孩子节点时才输出(DispBTree(b->lchild);   //递归处理左子树if(b->rchild != NULL){cout<<",";             //有右孩子结点时才输出,}DispBTree(b->rchild);    //递归处理右子树cout<<")";                //有孩子结点时才输出}}
}int main()
{BTNode *b;//从控制台输入二叉树char *p;p = (char *)malloc(20*sizeof(char));cin>>p;CreateBTree(b, p);cout<<"输出二叉树";DispBTree(b);cout<<endl;cout<<"二叉树高度为: "<<BTHeight(b);free(p);DestroyBTree(b);return 0;
}

运行结果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/7LvbjZmT.shtml

相关文章

二叉树4:二叉树求树高度(超级详细)

一、思路 什么是树高&#xff1f; 树的高度(或深度)就是树中结点的最大层数。 在这里使用后序遍历的递归算法。 对每一个结点都进行如下操作&#xff1a; 后序遍历其左子树求树高后序遍历其右子树求树高对这个结点进行下面操作&#xff1a; 比较其左右子树的高度大小若左&g…

二叉树的高度和深度

二叉树的高度和深度定义 &#xff08;对某个节点来说&#xff09; 深度是指从根节点到该节点的最长简单路径边的条数&#xff1b; 高度是指从最下面的叶子节点到该节点的最长简单路径边的条数&#xff1b; &#xff08;对二叉树&#xff09; 深度是从根节点数到它的叶节点&…

关于360提示发现木马—HEUR/QVM.Malware.Gen

今天用Visual Studio写的关于三层架构的程序 在启动运行时&#xff0c;弹出了360关于"检测到木马程序"的提示框&#xff1a; 虽然知道自己写的是正规程序&#xff0c;但初看时还是被吓了一跳&#xff0c;于是立马上网查阅相关资料和解答&#xff0c;结论是&#xff…

WebRTC 之 RTX

AbstractWebRTC RTX 笔记AuthorsWalter FanCategorylearning noteStatusv1.0Updated2020-08-28LicenseCC-BY-NC-ND 4.0 什么是 RTX RTX 就是重传 Retransmission, 将丢失的包重新由发送方传给接收方。 Webrtc 默认开启 RTX (重传)&#xff0c;它一般采用不同的 SSRC 进行传输&a…

红与蓝:现代Webshell检测引擎免杀对抗与实践

上半年Webshell话题很火,业界举办了数场对抗挑战赛,也发布了多篇站在安全产品侧,着重查杀思路的精彩文章,但鲜有看到以蓝军视角为主的paper。 作为多场挑战赛的参赛者及内部红蓝对抗的参与者,笔者试着站在蓝军角度,聊聊现代Webshell对抗的一些思路,也以PHP Webshell为例…

堪比熊猫烧香!中国新型蠕虫病毒大爆发!电脑瞬间报废

堪比熊猫烧香&#xff01;中国新型蠕虫病毒大爆发&#xff01;电脑瞬间报废 近日&#xff0c;深信服安全团队监测到一种名为incaseformat的病毒&#xff0c;全国各个区域都出现了被incaseformat病毒删除文件的用户。 经调查&#xff0c;该蠕虫正常情况下表现为文件夹蠕虫&#…

Dreh zelle acht hoch

Android6.0权限和SharedPreferences存储 static class MyTask extends AsyncTask<String,String,String> { Override protected String doInBackground(String... strings) { FileOutputStream outnull; InputStream inputStreamnull;//网络连接的输入流 HttpURLConnecti…

json.cp37-win32.pyd HEUR/QVM30.2.223F.Malware...

问题 使用pyinstaller导出exe,运行时候会被360杀毒报木马. 病毒类型是HEUR/QVM30.2.223F.Malware.Gen 木马文件是 pandas库下的一个文件 \Python\Python37-32\Lib\site-packages\pandas\_libs\json.cp37-win32.pyd 原因 32位的pandas文件是 json.cp37-win32.pyd (32位的,3…

Herm Chart

参考链接 https://blog.csdn.net/QianLiStudent/article/details/111872100 https://www.jianshu.com/p/4bd853a8068b 1 概念 1.1 Helm 1.1.1 Helm是什么&#xff1f; Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Pyt…

关于桌面程序被安全软件误判为HEUR:Trojan.Win32.Generic的解决方案

最近写了一个桌面程序&#xff0c;里面用了些读取系统环境变量、提取文件图标、启动外部程序之类的操作。 然后…………卡巴斯基就把它识别成了HEUR:Trojan.Win32.Generic………… 咱遵纪守法好程序&#xff0c;怎么说是木马就是木马了呢&#xff1f;&#xff1f;&#xff1f; …

从0到1学会使用SpringBoot 搭建mock Server

做过接口测试的同学一定听说过mock Server&#xff0c;大家会觉得其很神秘&#xff0c;很高大上&#xff01;mock Server出现的原因是现今的业务系统很少有孤立存在的&#xff0c;它们或多或少需要使用兄弟团队或是其他公司提供的服务&#xff0c;这给我们的联调和测试造成了麻…

Postman mockserver详细教程

转自&#xff1a; https://blog.csdn.net/testdeveloper/article/details/80559538 模客API接口链接&#xff1a;http://mock-api.com/ http://mock-api.com/ http://mock-api.com/ http://mock-api.com/ 1.发送一个request 发送请求之后在History标签下保存了请求的数据&a…

postman如何使用mockserver?

mock服务&#xff0c;实现创建一个url&#xff0c;设定response Body&#xff0c;通过访问这个假的url&#xff0c;就能得到想要的返回结果。 应用于&#xff0c;当后端接口如A没有开发完成&#xff0c;但是当前测试又依赖于接口A时&#xff0c;就可以用mock服务&#xff0c;访…

Postman接口Mock Server服务器设置

目录 一、适用场景 二、设置步骤 2.1.创建一个mock server 2.2.配置mock server 2.3.Mock Servers创建成功一个新的mock地址 2.4.环境变量Environments&#xff1a;生成一个mock server新的环境变量 2.5.项目集Collections&#xff1a;生成一个mock server新的项目集&am…

java mockserver搭建_使用Moco搭建Mock Server教程

Moco是一个简易的Mock Server搭建工具 一、准备工作 2.电脑需要安装Java环境 二、运行Moco 打开terminal&#xff0c;运行命令 java -jar http -p -c < configuration -file> &#xff1a;moco-runner-xxx-standalone.jar包的路径 &#xff1a;http服务监听的端口 &#…

用 java 安装 mockserver_前端工程化-Mock Server:使用Node+json-server+mock.js搭建Mock Server...

目的 为了便于前后端分离开发&#xff0c;前端在本地启动mock服务进行开发&#xff0c;后续对接联调时只需将接口地址改成真实地址即可。 一个优秀的mock server应具备以下功能&#xff1a; 随机数据生成&#xff0c;避免手动创建数据&#xff1b; 真实接口体验&#xff0c;内存…

android端使用mockServer

小伙伴们可能在开发的过程中遇到这样的痛点&#xff1a;比如一个新的项目开发需求下来了&#xff0c;正常来说&#xff0c;要等到服务端将接口开发完毕&#xff0c;我们才去对接数据。但是&#xff0c;往往后端人员又很忙&#xff0c;不能立马开发出接口&#xff0c;这样就大大…

postman使用mock server

可以修改请求返回值&#xff08;response body数据&#xff09; 登录postman账号&#xff0c;也可以在线操作Postman API Platform 其他流程可参考 使用Postman实现mock server搭建详解_postman mockserver_阿波-赞的博客-CSDN博客

Postman搭建mock server接口

在工作中&#xff0c;有时后端的接口还没有开发好&#xff0c;前端这时可以用postman的mock server来创建一个伪接口&#xff0c;访问这个伪接口来获得自己想要的响应。 在学习接口测试的过程中&#xff0c;也可以用postman的这个功能&#xff0c;来帮助学习接口测试。 1.首先…

Postman Mock Server 使用

前言 科普界的老问题了。 大部分博客日志抄官方文档给的初始化样例&#xff0c;啥也不说。 看完除了会create&#xff0c;啥也不会了。 自食其力研究一下。 创建 略。 见document。 https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/moc…