2.7:二叉树创建、先中后遍历、各个节点度的个数、深度

1.二叉树的创建、先中后遍历、各个节点度的个数、深度

程序代码:

  1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 typedef char datatype;5 typedef struct node6 {7     datatype data;8     struct node *lchild;9     struct node *rchild;10 }*Btree;11 //创建节点12 Btree create_node()13 {14     Btree s=(Btree)malloc(sizeof(struct node));15     if(NULL==s)16         return NULL;17     s->data='\0';18     s->lchild=s->rchild=NULL;19     return s;20 }21 //创建树22 Btree create_tree()23 {24     datatype element;25     printf("please enter element:");26     scanf(" %c",&element);27     if(element=='#')28         return NULL;29     //创建节点30     Btree tree=create_node();31     tree->data=element;32     //递归创建节点左孩子33     puts("左");34     tree->lchild=create_tree();35     //递归创建节点右孩子36     puts("右");37     tree->rchild=create_tree();38     return tree;39 }40 //先序遍历41 void output_first(Btree tree)42 {43     if(NULL==tree)44         return;45     printf("%c",tree->data);46     output_first(tree->lchild);47     output_first(tree->rchild);48 }49 //中序遍历50 void output_mid(Btree tree)51 {52     if(NULL==tree)53         return;54     output_mid(tree->lchild);55     printf("%c",tree->data);56     output_mid(tree->rchild);57 }58 //后序遍历59 void output_last(Btree tree)60 {61     if(NULL==tree)62         return;63     output_last(tree->lchild);64     output_last(tree->rchild);65     printf("%c",tree->data);66 }67 //计算二叉树节点个数68 void Count(Btree tree,int *n0,int *n1,int *n2)69 {70     if(NULL==tree)71         return;72     if(tree->lchild==NULL&&tree->rchild==NULL)73         ++*n0;74     else if(tree->lchild!=NULL&&tree->rchild!=NULL)75         ++*n2;76     else77         ++*n1;78     Count(tree->lchild,n0,n1,n2);79     Count(tree->rchild,n0,n1,n2);80 }81 //计算深度82 int high(Btree tree)83 {84     if(NULL==tree)85         return 0;86     int left=1+high(tree->lchild);87     int right=1+high(tree->rchild);88     return left>right?left:right;89 }90 int main(int argc, const char *argv[])91 {92     //创建树93     Btree tree=create_tree();94     //先序遍历95     output_first(tree);96     puts("");97     //中序遍历98     output_mid(tree);99     puts("");
100     //后序遍历
101     output_last(tree);
102     puts("");
103     //计算二叉树节点个数
104     int n0=0,n1=0,n2=0;
105     Count(tree,&n0,&n1,&n2);
106     printf("n0=%d n1=%d n2=%d n=%d\n",n0,n1,n2,n0+n1+n2);
107     //计算深度
108     int high_tree=high(tree);
109     printf("%d\n",high_tree);
110     return 0;
111 }    

运行结果:

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

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

相关文章

2024PMP考试新考纲-近年PMP真题练一练和很详细解析(3)

今天华研荟继续为您分享和解析PMP真题&#xff0c;一方面让大家感受实际的PMP考试和出题形式&#xff0c;另一方面是通过较详细的解题思路和知识讲解帮助大家最后一个多月有效备考&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-近年真题随机练一练 (注&#x…

6.1810: Operating System Engineering 2023 <Lab9: mmap>

一、本节任务 二、Lab: mmap (hard) 2.1 mmap 介绍 mmap(2) 系统调用能将文件或者设备映射到内存中&#xff0c;返回映射区域的起始地址。 #include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); int munmap(void …

1-3 mininet中使用python API直接拓扑定义以及启动方式对比

作为SDN网络中搭建拓扑非常重要的仿真平台&#xff0c;我们可以使用mininet默认的库内拓扑文件&#xff0c;也可以使用python语言进行自定义拓扑。使用python进行拓扑定义时&#xff0c;不同的定义方式将导致其启动的方式由所不同。 一、采用最原始的命令启动方式&#xff1a; …

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

css1文本属性

一.颜色&#xff08;color&#xff09;&#xff08;一般用16进制&#xff09; 二.对齐&#xff08;text-align) 三.装饰&#xff08;text-decoration&#xff09; 四.缩进&#xff08;text-indent&#xff09;&#xff08;一般用2em&#xff09;&#xff08;有单位&#xff09;…

计算机组成原理——计算机系统概述

文章目录 概要计算机硬件的基本组成早期冯诺依曼的结构介绍特点 现代计算机的结构介绍五大部件的归属 五大部件存储器&#xff1a;存储体 MAR、MDR运算器控制器 运行原理 计算机软件系统软件和应用软件三种级别的语言编译程序与解释程序的区别 软件硬件功能程序的等价性指令集体…

《Git 简易速速上手小册》第9章:Git 工作流程定制(2024 最新版)

文章目录 9.1 选择合适的工作流9.1.1 基础知识讲解9.1.2 重点案例&#xff1a;为中等规模的 Python 项目选择 Feature Branch 工作流9.1.3 拓展案例 1&#xff1a;适应 Gitflow 工作流的大型项目9.1.4 拓展案例 2&#xff1a;使用 Forking 工作流的开源 Python 项目 9.2 定制化…

C++入门学习(二十五)do-while循环

do { // 代码块&#xff0c;至少会执行一次 } while (条件); 对比一下while和do-while循环&#xff1a; 因为while循环先判断条件&#xff0c;所以数字10直接就没有进入for循环里&#xff0c;卡在了判断条件这一步&#xff0c;所以就没有输出数据&#xff1b; do-while循环是…

迭代器和生成器

迭代器和生成器 一、迭代器① iter()② next()③ 自定义迭代器 二、生成器① 创建生成器1、斐波那契数列2、yield 创建 ② 使用send() 一、迭代器 迭代器是一个可以记住遍历的位置的对象&#xff0c;迭代器从第一个元素开始访问&#xff0c;直到所有元素访问结束 ① iter() …

NX/UG二次开发—其他—矩形套料(排料)简介

算法逻辑 排料方法一定时间内获取近似解的算法 看了一些论文和博客&#xff0c;一般排料方法采用最低水平线算法排料&#xff0c;再此基础上增加空余区域填充。 然后配合遗传学算法||模拟退火算法||蚁群算法||免疫算法等&#xff0c;在一定时间内求得一组最优解。 在最简单的…

挑战杯 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

java日志框架总结(五、logback日志框架)

一、logback概述 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块&#xff1a; 1、logback-core, 2、logback- classic 3、logback-access。 1&#xff09;logback-core是其它两个模块的基础模块。 2&#xff09;logback-…