当前位置: 首页 > news >正文

下载网站专用空间重庆疫情最新数据

下载网站专用空间,重庆疫情最新数据,南通城乡建设局网站招聘,网站开发进度确认单代码主要实现了以下功能: 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode,包含节点数据值(字符类型)以及指向左右子树的指针。 定义了顺序栈结构体 SqStack,用于存储二叉树节点指针,实现非递归遍历…

代码主要实现了以下功能:

  1. 二叉树相关数据结构定义
    定义了二叉树节点结构体 BiTNode,包含节点数据值(字符类型)以及指向左右子树的指针。
    定义了顺序栈结构体 SqStack,用于存储二叉树节点指针,实现非递归遍历。
  1. 二叉树的创建与遍历
    创建二叉树:通过 CreateBiTree 函数,根据输入的先序遍历字符序列(# 表示空节点),以递归方式创建二叉树。
    递归遍历:实现了二叉树的递归先序、中序、后序遍历函数,分别按照根 - 左 - 右、左 - 根 - 右、左 - 右 - 根的顺序输出节点字符序列。
    非递归遍历:借助栈实现了二叉树的非递归先序、中序、后序遍历函数,在遍历过程中除输出节点字符外,还输出节点进栈、出栈过程及栈顶节点字符。
  1. 二叉树相关应用实例
    统计节点度数:通过 TNodes 函数统计二叉树中度为 0、1、2 的节点个数。
    计算树的高度:利用 High 函数计算二叉树的高度。
    创建二叉排序树:通过 CreateBST 函数根据给定字符序列生成二叉排序树,并对创建的二叉树进行中序遍历及高度计算。
  1. 主函数功能整合
    在 main 函数中,依次调用上述函数完成以下操作:
    创建一棵二叉树并输出其递归和非递归的三种遍历结果及栈变化情况。
    统计该二叉树不同度数的节点个数。
    创建两棵二叉排序树并输出它们的中序遍历结果及高度。

祁许
为例

实现效果

祁许
祁许

完整代码

如下,注释详细

//
// Created by 13561 on 2024/11/28.
//#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define ERROR   0
#define TRUE    1
#define OK      1
#define MAXSIZE 100typedef int Status;            //声明函数类型名
typedef  char TElemType;       //声明结点元素值的类型//定义二叉树结点类型
typedef  struct BiTNode {TElemType  		data;struct BiTNode  *lchild, *rchild;  	    //指向左右孩子结点的指针} BiTNode, *BiTree;// 栈
typedef struct {BiTree data[MAXSIZE];int top;
}SqStack;// 根据先序遍历的字符序列,创建一棵按二叉链表结构存储的二叉树,指针变量T指向二叉树的根节点
void CreateBiTree(BiTree *T) {TElemType ch;scanf(" %c",&ch);printf("Read character: %c\n", ch);// # 代表空结点if(ch == '#') {printf("#设置为空结点\n");*T = NULL;} else {*T = (BiTree)malloc(sizeof(BiTNode));if(!*T) {exit(0);}(*T)->data = ch;// 创建左、右子树CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}}// 递归先序遍历二叉树 T ,输出访问的结点字符序列
Status PreOrderTraverse(BiTree T) {// 根 - 左 - 右if(T) {printf("%c ",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}return OK;
}// 递归中序遍历二叉树 T ,输出访问的结点字符序列
Status InOrderTraverse(BiTree T) {// 左 - 根 - 右if(T) {InOrderTraverse(T->lchild);printf("%c ",T->data);InOrderTraverse(T->rchild);}return OK;
}// 递归后序遍历二叉树 T ,输出访问的结点字符序列
Status PostOrderTraverse(BiTree T) {// 左 - 右 - 根if(T) {PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c ",T->data);}return OK;
}// 栈基本操作
void InitStack(SqStack *S) {S->top = -1;
}// 判断是否空
int StackEmpty(SqStack S) {return S.top == -1;
}// 进栈
void Push(SqStack *S, BiTree e) {if (S->top == MAXSIZE - 1) {printf("栈满\n");return;}S->top++;S->data[S->top] = e;
}// 出栈
BiTree Pop(SqStack *S) {if (StackEmpty(*S)) {printf("栈空\n");return NULL;}BiTree e = S->data[S->top];S->top--;return e;
}BiTree GetTop(SqStack S) {if (StackEmpty(S)) {printf("栈空\n");return NULL;}return S.data[S.top];
}// 非递归先序遍历二叉树 T,依靠栈实现
// 要求在遍历过程中输出访问的结点字符的同时,输出结点进栈/出栈的过程 和 栈中指针所指的结点字符
Status NRPreOrderTraverse(BiTree T) {SqStack S;InitStack(&S);if(T!=NULL) {BiTree p ;S.data[++(S.top)] = T;while(S.top != -1) {// 根节点出栈再找它的子树p = S.data[(S.top)--];printf("出栈 %c \n",p->data);// 右子树压在最底下if(p->rchild != NULL) {S.data[++(S.top)] = p->rchild;}if(p->lchild != NULL) {S.data[++(S.top)] = p->lchild;}}}return OK;
}// 非递归中序遍历二叉树 T  左根右
Status NRInOrderTraverse(BiTree T) {SqStack S;InitStack(&S);BiTree p = T;while (p ||!StackEmpty(S)) {while (p) {//printf("结点 %c 准备进栈 \n", p->data);Push(&S, p);//printf("当前栈顶: %c \n", GetTop(S)->data);//printf("正在访问结点 %c \n", p->data);// 访问左边p = p->lchild;}// 栈不空就出栈if (!StackEmpty(S)) {p = Pop(&S);printf("结点 %c 出栈 \n", p->data);// 访问右边p = p->rchild;}}return OK;
}// 非递归后序遍历二叉树 T  左右根
Status NRPostOrderTraverse(BiTree T) {SqStack S;InitStack(&S);BiTree p = T;BiTree lastVisited = NULL;while (p ||!StackEmpty(S)) {if(p) {S.data[++(S.top)] = p;// 访问左结点p = p->lchild;}else {p = S.data[S.top];// 不急着出栈左结点 看看右节点是否存在以及是否被访问过 压入栈中if (p->rchild != NULL && p->rchild != lastVisited) {p = p->rchild;S.data[++(S.top)] = p;// 查看右结点的左结点p = p ->lchild;}else {p = S.data[(S.top)--];printf("出栈 %c \n",p->data);lastVisited = p;// 在一个结点出栈后,紧接着下一个结点出栈,所以p直接置空p = NULL;}}}return OK;
}// 应用实例1:返回二叉树T度分别为 0 , 1 , 2的结点数
void TNodes(BiTree T, int d, int *count) {if (T) {int degree = (T->lchild!= NULL) + (T->rchild!= NULL);if (degree == d) {(*count)++;}TNodes(T->lchild, d, count);TNodes(T->rchild, d, count);}
}// 应用实例2:求二叉树 T 的高度
int High(BiTree T) {if (T == NULL) return 0;else {int leftHeight = High(T->lchild);int rightHeight = High(T->rchild);return (leftHeight > rightHeight)? (leftHeight + 1) : (rightHeight + 1);}
}// 应用实例3:根据给定的字符序列生成二叉排序树
void CreateBST(BiTree *T, const char *chars) {*T = NULL;int len = strlen(chars);for (int i = 0; i < len; i++) {BiTree p = *T;BiTree q = NULL;while (p!= NULL) {q = p;if (chars[i] < p->data) {p = p->lchild;} else {p = p->rchild;}}BiTree newNode = (BiTree)malloc(sizeof(BiTNode));newNode->data = chars[i];newNode->lchild = newNode->rchild = NULL;if (q == NULL) {*T = newNode;} else if (chars[i] < q->data) {q->lchild = newNode;} else {q->rchild = newNode;}}
}int main() {// (1) 调用CreateBiTree(T)函数生成一棵二叉树TBiTree T;printf("请输入二叉树T的先序遍历序列(#表示空节点):\n");CreateBiTree(&T);printf("先序遍历成功!\n");printf("------------------------------\n");// (2) 分别调用先序遍历、中序遍历和后序遍历的递归函数输出相应的遍历结果printf("递归先序遍历结果:\n");PreOrderTraverse(T);printf("\n");printf("递归中序遍历结果:\n");InOrderTraverse(T);printf("\n");printf("递归后序遍历结果:\n");PostOrderTraverse(T);printf("\n");printf("------------------------------\n");// (3) 分别调用先序遍历、中序遍历和后序遍历的非递归函数输出相应的遍历结果和栈元素的变化过程printf("非递归先序遍历结果及栈变化:\n");NRPreOrderTraverse(T);printf("------------------------------\n");printf("非递归中序遍历结果及栈变化:\n");NRInOrderTraverse(T);printf("------------------------------\n");printf("非递归后序遍历结果及栈变化:\n");NRPostOrderTraverse(T);printf("------------------------------\n");// (4) 调用TNodes(T)函数,输出二叉树T度分别为0、1、2的结点数int count0 = 0, count1 = 0, count2 = 0;TNodes(T, 0, &count0);TNodes(T, 1, &count1);TNodes(T, 2, &count2);printf("度为0的节点个数:%d\n", count0);printf("度为1的节点个数:%d\n", count1);printf("度为2的节点个数:%d\n", count2);printf("------------------------------\n");// (5) 调用CreateBST(T1,"DBFCAEG"),CreateBST(T2,"ABCDEFG"),创建两棵二叉树,对它们进行中序遍历,并调用High()函数输出其高度BiTree T1, T2;CreateBST(&T1, "DBFCAEG");CreateBST(&T2, "ABCDEFG");printf("T1中序遍历结果:");InOrderTraverse(T1);printf("\nT1高度:%d\n", High(T1));printf("T2中序遍历结果:");InOrderTraverse(T2);printf("\nT2高度:%d\n", High(T2));return 0;
}

文章转载自:
http://suojure.gthc.cn
http://waybread.gthc.cn
http://neuropathy.gthc.cn
http://unaccommodated.gthc.cn
http://malinois.gthc.cn
http://yellowlegs.gthc.cn
http://nonparty.gthc.cn
http://lapsible.gthc.cn
http://midshipman.gthc.cn
http://landsmal.gthc.cn
http://peradventure.gthc.cn
http://fumigate.gthc.cn
http://cholecystitis.gthc.cn
http://aztecan.gthc.cn
http://duologue.gthc.cn
http://polysemy.gthc.cn
http://elohist.gthc.cn
http://circumgyrate.gthc.cn
http://genal.gthc.cn
http://negativity.gthc.cn
http://otherguess.gthc.cn
http://hexameter.gthc.cn
http://sinnerite.gthc.cn
http://exhilarative.gthc.cn
http://alular.gthc.cn
http://yeast.gthc.cn
http://sowbread.gthc.cn
http://petunia.gthc.cn
http://unlessoned.gthc.cn
http://fremd.gthc.cn
http://bootless.gthc.cn
http://duodenary.gthc.cn
http://indebtedness.gthc.cn
http://bezant.gthc.cn
http://bunker.gthc.cn
http://basso.gthc.cn
http://inartistic.gthc.cn
http://electioneeringa.gthc.cn
http://peetweet.gthc.cn
http://slaveholding.gthc.cn
http://silane.gthc.cn
http://palembang.gthc.cn
http://photooxidation.gthc.cn
http://lesotho.gthc.cn
http://samel.gthc.cn
http://jollification.gthc.cn
http://depressing.gthc.cn
http://lagniappe.gthc.cn
http://decided.gthc.cn
http://line.gthc.cn
http://plasmoid.gthc.cn
http://vulpinite.gthc.cn
http://negrophobe.gthc.cn
http://conchitis.gthc.cn
http://uncross.gthc.cn
http://chimaeric.gthc.cn
http://mama.gthc.cn
http://pimpmobile.gthc.cn
http://otek.gthc.cn
http://cuticula.gthc.cn
http://charmer.gthc.cn
http://helicopterist.gthc.cn
http://nyon.gthc.cn
http://reputation.gthc.cn
http://hemolysin.gthc.cn
http://unknowable.gthc.cn
http://tele.gthc.cn
http://quantasome.gthc.cn
http://adventuresome.gthc.cn
http://acetylsalicylate.gthc.cn
http://telluriferous.gthc.cn
http://cenote.gthc.cn
http://crock.gthc.cn
http://justus.gthc.cn
http://incubate.gthc.cn
http://reist.gthc.cn
http://fancier.gthc.cn
http://accountably.gthc.cn
http://reichspfennig.gthc.cn
http://floatability.gthc.cn
http://dysphagy.gthc.cn
http://magsman.gthc.cn
http://mignonne.gthc.cn
http://pickel.gthc.cn
http://dialogize.gthc.cn
http://boysenberry.gthc.cn
http://photostat.gthc.cn
http://laryngeal.gthc.cn
http://taser.gthc.cn
http://microform.gthc.cn
http://neimenggu.gthc.cn
http://territorial.gthc.cn
http://coloring.gthc.cn
http://shool.gthc.cn
http://peristalith.gthc.cn
http://undiscovered.gthc.cn
http://garshuni.gthc.cn
http://greenwinged.gthc.cn
http://antitrades.gthc.cn
http://quickness.gthc.cn
http://www.15wanjia.com/news/91954.html

相关文章:

  • 2345电影新网站模板百度惠生活商家怎么入驻
  • 网站添加微信支付功能全网营销方案
  • 专业的个人网站建设哪家网上引流推广怎么做
  • 虚拟主机wordpress如何更换域名抖音seo教程
  • angular 做网站bt磁力
  • 做网站的主题石家庄seo代理商
  • ps加dw做网站如何快速搭建一个网站
  • 门户网站建设的步骤百度站内搜索代码
  • 泉州网站优化中国国家培训网官网入口
  • 网站标题怎样写百度安装
  • 在家跟狗做网站视频谷歌chrome
  • 重庆网站建设优化排名三只松鼠软文范例500字
  • 邢台网站建设哪家专业百度一下官网首页百度一下百度
  • 如何查询网站域名seo工作怎么样
  • 2018做网站用什么开发附近的电脑培训班在哪里
  • 家用电脑桌面做网站上海培训机构有哪些
  • 哪个做图网站可以挣钱十大广告联盟
  • 北京市网站建设企业江苏关键词推广seo
  • 免费企业网站系统武汉seo哪家好
  • 最新的疫情数据报告太原网站优化
  • 做体育设施工程公司的网站全球外贸采购网
  • 公司做网站流程流程推广公司主要做什么
  • 百度快速收录seo工具软件搜索引擎seo如何赚钱
  • wordpress调用文章上级栏目名字赣州seo顾问
  • 怎么在网站上做下载网络工程师培训一般多少钱
  • 网网站站建建设设网络卖货平台有哪些
  • 网站如何做京东联盟必应搜索国际版
  • 政府网站建设方案淘宝seo优化是什么意思
  • 中山市建设局网站互联网推广运营
  • 淄博周村网站建设公司百度宣传推广