二叉树与递归

二叉树的三种遍历方法:
前序遍历:根结点 —> 左子树 —> 右子树

中序遍历:左子树—> 根结点 —> 右子树

后序遍历:左子树 —> 右子树 —> 根结点

下面是三种遍历的代码和计算树的大小,计算叶子的个数,树的高度和计算k层结点的个数,都是递归思想

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int BTDatatype;typedef struct BinaryTreeNode {BTDatatype data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;BTNode* CreatNode(BTDatatype x)//创建树的结点
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));assert(node);node->data = x;node->left = NULL;node->right = NULL;return node;
}BTNode* CreatTree()//手动创建一个树
{BTNode* node1 = CreatNode(1);BTNode* node2 = CreatNode(2);BTNode* node3 = CreatNode(3);BTNode* node4 = CreatNode(4);BTNode* node5 = CreatNode(5);BTNode* node6 = CreatNode(6);BTNode* node7 = CreatNode(7);node1->left = node2;node1->right = node4;node2->left = node3;node4->left = node5;node4->right = node6;node5->right = node7;return node1;
}void PrevOrder(BTNode* root)//前序遍历
{if (root == NULL){printf("N ");return;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}void INOrder(BTNode* root)//中序遍历
{if (root == NULL){printf("N ");return;}INOrder(root->left);printf("%d ", root->data);INOrder(root->right);
}void TailOrder(BTNode* root)//后序遍历
{if (root == NULL){printf("N ");return;}TailOrder(root->left);TailOrder(root->right);printf("%d ", root->data);
}int TreeSize(BTNode* root)//树的大小
{return (root == NULL) ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}int TreeLeafSize(BTNode* root)//叶子的个数
{if (root == NULL)return 0;if (root->left == NULL && root->right == NULL)return 1;return TreeLeafSize(root->left) + TreeLeafSize(root->right);
}int TreeHigh(BTNode* root)//树的高度
{if (root == NULL)return 0;int LeftHigh = TreeHigh(root->left);int RightHigh = TreeHigh(root->right);return  LeftHigh > RightHigh ? LeftHigh + 1 : RightHigh + 1;
}int numk(BTNode* root, int k)//计算k层结点的个数
{assert(k > 0);if (root == NULL)return 0;if (k == 1){return 1;}return  numk(root->left, k - 1) + numk(root->right, k - 1);
}int main()
{BTNode* root = CreatTree();printf("前序遍历:");PrevOrder(root);printf("\n");printf("中序遍历:");INOrder(root);printf("\n");printf("后序遍历:");TailOrder(root);printf("\n");printf("树的大小:");printf("%d", TreeSize(root));printf("\n");printf("叶子的个数:");printf("%d", TreeLeafSize(root));printf("\n");printf("树的高度:");printf("%d", TreeHigh(root));printf("\n");int k = 0;scanf("%d", &k);printf("第%d层的结点个数为:", k);printf("%d", numk(root, k));printf("\n");return 0;
}

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

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

相关文章

C#面:选择题:关于try-catch-finally

下列关于 try…catch…finaly 语句的说明中&#xff0c;不正确的是&#xff1a; A)catch块可以有多个 B)finaly总会执行 C)catch块也是可选的 D)可以只有try块 答&#xff1a;D 解析&#xff1a; A)catch块可以有多个&#xff1a; 可以使用多个catch块来捕获不同类型的异常…

数据安全之路:Databend 用户策略指南

在 Databend 中&#xff0c;我们致力于保护用户的数据安全。除了身份认证之外&#xff0c;我们还提供了多种访问策略&#xff0c;包括网络策略&#xff08;Network Policy&#xff09;、密码策略&#xff08;Password Policy&#xff09;和数据脱敏策略&#xff08;Masking Pol…

JavaScript进阶5之垃圾回收(计算机组成、解释与编译、JavaScript引擎、垃圾回收、内存管理)、运行机制(浏览器进程分类、浏览器事件循环)

垃圾回收&运行机制 垃圾回收计算机组成解释与编译JavaScript引擎V8引擎 垃圾回收引用计数法标记清除&#xff08;mark-sweep&#xff09;算法 内存管理新生代 运行机制浏览器进程分类&#xff1a;浏览器事件循环宏任务微任务整体流程浏览器事件循环案例一案例二 垃圾回收 …

Android OpenMAX - 开篇

Android Media是一块非常庞大的内容&#xff0c;上到APP的书写&#xff0c;中到播放器的实现、封装格式的了解&#xff0c;下到OMX IL层的实现、Decoder的封装&#xff0c;每一块都需要我们下很大的功夫学习。除此之外&#xff0c;我们还要对一些相关的模块进行了解&#xff0c…

东方 - 分支(2) - 多分支

目录 解析部分&#xff1a;多分支1304. 冷饮的价格&#xff08;2&#xff09;问题描述解题思路代码实现代码解析 1044. 找出最经济型的包装箱型号问题描述解题思路代码实现代码解析 1039. 求三个数的最大数问题描述解题思路代码实现代码解析 1035. 判断成绩等级问题描述解题思路…

Unity学习日记 11.单词识别游戏

目录 1.返回鼠标单击对象的名字 2.鼠标拖动移动对象 3.实现鼠标跟随 4.场景准备工作 5.判断图片与框配对 6.根据配对结果放置图片 1.返回鼠标单击对象的名字 步骤&#xff1a; 创建一个ShowName的脚本&#xff0c;并挂载在摄像机上 RaycastHit2D hitInfo;void Update(){…

CANalyzer使用_04 使用CAN报文发送数据

本文手把手介绍使用CAN来发送数据。分为创建工程&#xff0c;创建CAN报文&#xff0c;运行效果&#xff0c;参考文献。 1 创建工程 双击“CANalyzer->单击“I accept”->等一会等软件打开后&#xff0c;单击“File”->单击"New"->双击"CAN 500kBa…

vue3+ts+element home页面侧边栏+头部组件+路由组件组合页面教程

文章目录 效果展示template代码script代码样式代码 效果展示 template代码 <template><el-container class"home"><el-aside class"flex" :style"{ width: asideDisplay ? 70px : 290px }"><div class"aside-left&q…

json文件美化工具(json tools)

自动整理json文件&#xff0c;使用&#xff1a;ctrlaltM

【数学】第十三届蓝桥杯省赛C++ A组/研究生组 Python A组/研究生组《数的拆分》(C++)

【题目描述】 给定 T 个正整数 &#xff0c;分别问每个 能否表示为 的形式&#xff0c;其中 , 为正整数&#xff0c;, 为大于等于 2 的正整数。 【输入格式】 输入第一行包含一个整数 T 表示询问次数。 接下来 T 行&#xff0c;每行包含一个正整数 。 【输出格式】 对于…

浅析JS原型链

目录 实例对象原型对象对象原型短暂总结一下constructor原型链 何为原型链呢&#xff1f; 就是实例对象和原型对象之间的链接,每一个对象都有原型,原型本身又是对象,原型又有原型,以此类推形成一个链式结构.称为原型链。 这里又扯到了另外两个概念了。 实例对象>>&g…

el-upload上传文件前端自己读取excel

1.读取方法 需要下载xlsx依赖 export const readExcelFile (file) > {return new Promise((resolve, reject) > {let reader new FileReader();reader.readAsBinaryString(file.raw);reader.onload (ev) > {try {let dataBinary ev.target.result;let workBook …

PyTorch 教程-快速上手指南

文章目录 PyTorch Quickstart1.处理数据2.创建模型3.优化模型参数4.保存模型5.加载模型 PyTorch 基础入门1.Tensors1.1初始化张量1.2张量的属性1.3张量运算1.3.1张量的索引和切片1.3.2张量的连接1.3.3算术运算1.3.4单元素张量转变为Python数值 1.4Tensor与NumPy的桥接1.4.1Tens…

腾讯云轻量4核8G12M服务器配置4C8G12M详解

4核8G是云服务器的参数&#xff0c;代表云服务器的硬件配置和网络带宽&#xff0c;4核代表CPU、8G是指内存、12M代表带宽值为12Mbps&#xff0c;腾讯云百科txybk.com以腾讯云轻量应用服务器4核8G12M带宽配置为例&#xff0c;来详细介绍下服务器参数&#xff1a; 4c8g是什么意思…

Unity学习笔记 9.2D射线

下载源码 UnityPackage 1.Ray2D 让小球向右发射射线&#xff1a; Ray2D ray;void Start() {// Ray2D(起点&#xff0c;终点)ray new Ray2D(this.transform.position, Vector2.right);// Debug.DrawLine(起点&#xff0c;终点&#xff0c;颜色&#xff0c;显示时间)Debug.DrawL…

嵌入式开发——基础电路知识

1. 电路知识 1.1. 驱动能力 IC是数字逻辑芯片&#xff0c;其输出的是逻辑电平。逻辑电平0表示输出电压低于阈值电压&#xff0c;逻辑1表示输出电压高于阈值电压。负载则是被驱动的电路或元件&#xff0c;负载大小则指负载的电阻大小。 驱动能力主要表现在几个方面&#xff1…

C语言经典例题(9) --- 简单计算器、获得月份天数、HTTP状态码、图像相似度、有序序列插入一个数

文章目录 1.简单计算器2.获得月份天数3.HTTP状态码4. 图像相似度5.有序序列插入一个数 1.简单计算器 题目描述&#xff1a; KK实现一个简单计算器&#xff0c;实现两个数的“加减乘除”运算&#xff0c;用户从键盘输入算式“操作数1运算符操作数2”&#xff0c;计算并输出表达…

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置&#xff1a;my.cnf3. 开机自启动设置&#xff08;可选设置&#xff09;4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

【[NOIP1999 普及组] Cantor 表】

题目描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 我们以 Z 字形给上表的每一项编号。第一项是 1 / 1 1/1 1/1&#xff0c;然后是 1 / 2 1/2 1/2&#xff0c; 2 / 1 2/1 2/1&#xff0c; 3 / 1 3/1…

腾讯云2核4G服务器最大能承载多少人访问?

腾讯云轻量应用服务器2核4G5M配置性能测评&#xff0c;腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;并发数10&#xff0c;支持每天5000IP人数访问&#xff0c;腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线&#xff1f;并发数测试、CPU性能、内存性能、…