二叉树的基本操作及应用(三)

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef char DataType;
int depth=0;
int h1=1;
int nlayer=1;
char ch2;
typedef struct node
{DataType data;//节点数据元素struct node *lchild;//指向左孩子struct node *rchild;//指向右孩子
}BinTNode,*BinTree;
void GetPreOrder(char *last,char *mid,BinTree &T,int len)
{//利用后序和中序建立二叉树if(len==0){T = NULL;return;} //取出后序序列中的最后一个节点char ch=last[len-1];int index=0;  //在中序序列中进行查找根节点,并用index记录其在序列中的索引while(mid[index]!=ch){index++;} T=(BinTree)malloc(sizeof(BinTNode)); //给根节点分配空间T->data=mid[index];  GetPreOrder(last,mid,T->lchild,index);//建立左子树  GetPreOrder(last+index,mid+index+1,T->rchild,len-index-1);//建立右子树
}
void GetPostOrder(char *prim,char *mid,BinTree &T,int len)
{//利用先序和中序建立二叉树if(len==0){T=NULL;return;}  char ch=prim[0];//提出先序序列中的第一个节点int index=0;  while(mid[index]!=ch){//在中序序列中查找当前根节点。并用index记录其在序列中的位置index++;}  //给根节点分配空间T=(BinTree)malloc(sizeof(BinTNode));T->data=mid[index];  GetPostOrder(prim+1,mid,T->lchild,index); //建立左子树 GetPostOrder(prim+index+1,mid+index+1,T->rchild,len-index-1);//建立右子树
}
void createB(BinTree &T)
{//扩展先序遍历创建二叉链表DataType ch;scanf("%c",&ch);if(ch=='.')T=NULL;else{T=(BinTNode *)malloc(sizeof(BinTNode));T->data=ch;createB(T->lchild);createB(T->rchild);}
}
void gradeBT(BinTree &T,DataType ch,int d,int *n)
{/*求ch结点所在层数*/if (T)  {d++;if(T->data==ch)*n=d;gradeBT(T->lchild,ch,d,n);gradeBT(T->rchild,ch,d,n);}
}
void countdef(BinTree T,int &n)
{  /*统计叶子结点数*/if(T!=NULL){if(T->lchild==NULL&&T->rchild==NULL)n++;countdef(T->lchild,n);countdef(T->rchild,n);}
}
int depthhou(BinTree bt)
{//后序遍历求二叉树的高度int hl,hr,max;if(bt!=NULL){hl=depthhou(bt->lchild);hr=depthhou(bt->rchild);max=hl>hr?

hl:hr; return (max+1); } else return 0; } void depthxian(BinTree bt,int h1) {//先序遍历求二叉树高度 if(bt!=NULL) { if(h1>depth) depth=h1; depthxian(bt->lchild,h1+1); depthxian(bt->rchild,h1+1); } } void PrintTree(BinTree bt,int nlayer) {//树状打印二叉树 if(bt==NULL) return; PrintTree(bt->rchild,nlayer+1); for(int i=0;i<nlayer;i++) printf(" "); printf("%c\n",bt->data); PrintTree(bt->lchild,nlayer+1); } void Inorderxian(BinTree &T) {//先序输出二叉树 if(T!=NULL) { printf("%3c",T->data); Inorderxian(T->lchild); Inorderxian(T->rchild); } } void Inorderzhong(BinTree &T) {//中序输出二叉树 if(T!=NULL) { Inorderzhong(T->lchild); printf("%3c",T->data); Inorderzhong(T->rchild); } } void Inorderhou(BinTree &T) {//后序输出二叉树 if(T!=NULL) { Inorderhou(T->lchild); Inorderhou(T->rchild); printf("%3c",T->data); } } void main() { DataType ch; BinTree root; BinTree T=NULL; BinTree BT=NULL; int d=0,h=0,l=1,n=0; int x,count2=0,count3=0; DataType first[26],mid[26],last[26]; root=(BinTNode *)malloc(sizeof(BinTNode)); printf("*****************************************************************\n"); printf("* 1、扩展先序遍历创建二叉树 2、统计二叉树叶子结点数 *\n"); printf("* 3、先序遍历求二叉树高度 4、后序遍历求二叉树高度 *\n"); printf("* 5、按树状打印二叉树 7、利用先序和中序创建二叉树 *\n"); printf("* 8、利用后序和中序创建二叉树 9、先序输出二叉树 *\n"); printf("* 10、中序输出二叉树 11、后序输出二叉树 *\n"); printf("*****************************************************************\n"); printf("请输入你的选择:\n"); //第一种方法创建二叉树 printf("请依照先序遍历的顺序输入须要中序遍历的字符:\n"); createB(root); printf("先序遍历输入二叉树例如以下:"); Inorderxian(root); printf("\n"); printf("中序遍历输入二叉树例如以下:"); Inorderzhong(root); printf("\n"); printf("后序遍历输入二叉树例如以下:"); Inorderhou(root); printf("\n\n"); printf("统计二叉树叶子数:"); countdef(root,n); printf("count=%d\n",n); printf("先序遍历输出二叉树的高度:"); depthxian(root,h1); printf("depthxain=%d\n",depth); printf("后序遍历输出二叉树的高度:"); printf("depthhou=%d\n",depthhou(root)); printf("打印输出二叉树的树状结构:\n"); PrintTree(root,1); //另外一种方法创建二叉树 printf("请输入先序和中序序列:\n"); scanf("%s%s",first,mid); GetPostOrder(first,mid,T, strlen(first)); printf("打印输出二叉树的树状结构:\n"); PrintTree(root,1); printf("先序遍历输入二叉树例如以下:"); Inorderxian(T); printf("\n"); printf("中序遍历输入二叉树例如以下:"); Inorderzhong(T); printf("\n"); printf("后序遍历输入二叉树例如以下:"); Inorderhou(T); printf("\n"); printf("统计二叉树叶子数:"); countdef(T,count2); printf("count2=%d\n",count2); printf("先序遍历输出二叉树的高度:"); depthxian(T,h1); printf("depthxain=%d\n",depth); printf("后序遍历输出二叉树的高度:"); printf("depthhou=%d\n",depthhou(T)); //第三种方法创建二叉树 printf("请输入后序和中序序列:\n"); scanf("%s%s",last,mid); GetPreOrder(last,mid,BT,strlen(last)); printf("打印输出二叉树的树状结构:\n"); PrintTree(BT,1); printf("先序遍历输入二叉树例如以下:"); Inorderxian(BT); printf("\n"); printf("中序遍历输入二叉树例如以下:"); Inorderzhong(BT); printf("\n"); printf("后序遍历输入二叉树例如以下:"); Inorderhou(BT); printf("\n"); printf("统计二叉树叶子数:"); countdef(BT,count3); printf("count3=%d\n",count3); printf("先序遍历输出二叉树的高度:"); depthxian(BT,h1); printf("depthxain=%d\n",depth); printf("后序遍历输出二叉树的高度:"); printf("depthhou=%d\n",depthhou(BT)); printf("\n"); printf("\n"); }


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

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

相关文章

maven的profile详解

详细内容请见&#xff1a;https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建&#xff1b;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置&#xff0c;可以用来设置或者覆盖配置默认值。有…

夏至未至计算机版音乐,夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总...

夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陈学冬、郑爽、白敬亭等联袂主演的青春偶像剧,昨晚已经开播了&#xff0c;那么第一集的插曲是什么呢?和小编一起去看看吧!夏至未至第一集插曲《那些花儿》那片笑…

了解如何在20分钟内创建您的第一个Angular应用

Angular is a JavaScript framework, created my Misko Hevery and maintained by Google. It’s an MVC (Model View Vontroller). You can visit the official page to learn more about it.Angular是一个JavaScript框架&#xff0c;创建了我的Misko Hevery&#xff0c;并由G…

js闭包使用

闭包就是在一个函数内定义一个内部函数 并返回内部函数 function f1(){var a1; addfunction(){aa1;} function f1Sub(){ console.log(a); } return f1Sub; } var ff1();f();add();f();var f2f1();add();f(); 输出为 1 2 2 可以看到输出结果 定义f2后执行add 这时 f2的add函数已…

BIO,NIO,AIO总结(二)

这里重点介绍NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCeV9w?转载于:https://www.cnblogs.com/smallJunJun/p/10607078.html

思科配置计算机ip地址子网掩码,计算机系统与网络技术IP地址 子网掩码 主机号等计算复习...

IP地址 子网掩码 主机号等计算复习IP地址、子网掩码、网络号、主机号、网络地址、主机地址复习 IP地址&#xff1a;4段十进制&#xff0c;共32位二进制&#xff0c;如&#xff1a;192.168.1.1 二进制就是&#xff1a;11000000&#xff5c;10101000&#xff5c;00000001&#xf…

nmap常用参数详解

nmap常用参数详解 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 借用英雄联盟的一个英雄赵信的一句话&#xff1a;“即使敌众我寡,末将亦能万军丛中取敌将首级!”。三国关羽&#xff0c;万军丛中斩了颜良&#x…

r语言r-shiny_使用Shiny和R构建您的第一个Web应用程序仪表板

r语言r-shinyby AMR通过AMR 使用Shiny和R构建您的第一个Web应用程序仪表板 (Build your first web app dashboard using Shiny and R) One of the beautiful gifts that R has (that Python missed,until dash) is Shiny. Shiny is an R package that makes it easy to build …

RHEL5.8配置开机自动挂载磁盘

Linux环境中可以通过fstab来设置自动挂载磁盘或者共享存储&#xff0c;操作如下&#xff1a; fstab配置文件路径&#xff1a;/etc/fstab 每行代表一个存储位置。 [rootappsrv01 ~]# cat /etc/fstab LABEL/ / ext3 defaults 1…

909计算机基础大纲,《计算机应用基础》(专科)考试大纲

《计算机应用基础》(专科)考试大纲《计算机应用基础》考试大纲考试对象&#xff1a;《计算机应用基础》考试大纲适用于网络教育所有专业的高中起点专科学生。 考试教材&#xff1a;《全国计算机等级考试一级MS Office教程》(2004版)&#xff0c;南开大学出版社 课程学时&#x…

模板变量,过滤器和静态文件引用

模板变量&#xff0c;过滤器和静态文件引用 模板路径 Djiango先到settings里面找templates下的DIRS查看是否有路径&#xff0c;也是从上往下依次寻找&#xff0c;找到就返回。如果DIRS没有&#xff0c;就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据I…

antd option宽度自适应_WordPress文章中添加自适应宽度的表格——墨涩网

WordPress文章中添加自适应表格&#xff0c;前面写文章的时候需要用到表格来表达阵列信息&#xff0c;但是在WordPress添加表格不想是在office中那样方便&#xff0c;需要借助插件或者代码才可以实现&#xff0c;今天分享一个不需要安装插件纯代码实现WordPress文章中添加自适应…

Go语言程序记录日志

许多软件系统运行中需要日志文件。Go语言程序中&#xff0c;输出日志需要使用包"log"&#xff0c;编写程序十分简单。 像Java语言程序&#xff0c;输出日志时&#xff0c;往往需要使用开源的软件包来实现&#xff0c;编写程序稍微复杂一些。 Go语言的包"log&quo…

如何让代码更易于维护_如何轻松地使您的网站更易于访问

如何让代码更易于维护by Jaroslav Vaňkt通过JaroslavVaňkt 如何轻松地使您的网站更易于访问 (How you can easily make your website more accessible) As a designer, developer, or even product manager, you have thousands of responsibilities. Every project require…

计算机安全概论论文,计算机安全探讨论文毕业论文(7篇).doc

计算机安全探讨论文毕业论文(7篇)计算机安全探讨论文毕业论文(7篇)计算机安全探讨论文毕业论文(7篇)预读: 第一篇:终端计算机安全检查技术研究【摘要】信息安全保密管理工作的重点和计算机终端检查的难点,促进了计算机安全检查技术的发展.本文回顾了终端检查技术经历的三个阶段…

OO第一单元总结

OO第一单元总结 第一次作业总结 这是我第一次接触Java和面向对象思想&#xff0c;最一开始&#xff0c;我建立了简单的类和对象的概念&#xff0c;多亏了第一次作业难度和复杂度较低&#xff0c;我才没有崩掉hhh。 第一次作业我只分了三个类&#xff0c;一个main&#xff0c;一…

接口开发指的是什么_企业在什么情况下要选择定制开发软件

软件定制开发是指软件开发商依据我们的需求停止量身定制的开发&#xff0c;软件定制开发相关于单纯产品的施行周期长、本钱高、风险大。假如根据定制开发的工作量或水平来分&#xff0c;我们能够分为完整定制开发和局部定制开发&#xff0c;完整定制开发是指软件开发公司依据我…

python2x 安装 psutil

安装psutil模块&#xff1a; wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-certificatetar -zxvf psutil-2.0.0.tar.gzcd psutil-2.0.0python setup.py install转载于:https://www.cnblogs.com/yingdiblog/p/7347325.html

c++编码风格指南_带回家的编码挑战的基本指南

c编码风格指南by Jane Philipps简菲利普斯 带回家的编码挑战的基本指南 (The Essential Guide to Take-home Coding Challenges) 介绍 (Introduction) Hi, I’m Jane. I wrote this guide because I want to help others with non-traditional backgrounds succeed on take-ho…

计算机没有搜索筛选功能,EXCEL中筛选工具怎么没有搜索功能

EXCEL中筛选工具怎么没有搜索功能卡饭网本站整理2018-04-01excel是一款数据处理工具&#xff0c;可以在众多的数据中找到想要的经过处理之后的数据&#xff0c;而最直接方便的功能就是筛选。请阅读下文&#xff0c;了解如何对数据进行筛选。如下图所示的学生成绩中&#xff0c;…