【二叉树】(一)

news2024/10/7 20:27:11

🖊作者 : D. Star.
📘专栏 : 数据结构
😆今日分享 : 为什么阴干的衣服会有味道?
衣服上超过三分之二的污垢来自我们身体外部的分泌物,即汗水和皮脂。如果在洗衣服的过程中皮脂没有洗干净的话,它就可以成为衣服(没有正确晒干)臭味来源的罪魁祸首。因为这些天然的油没有洗掉就会沉到布料的纤维中,并且它们非常粘稠,容易吸引污垢。这就为细菌真菌的繁殖提供了一个绝佳的“培养皿”。如果天气阴冷潮湿,无法让衣服晒干,细菌会跟衣服上残留的汗液、皮肤细胞和其他各种腺体分泌物发生反应,产生挥发性有机化合物,就会产生臭味。
请添加图片描述

文章目录

  • 🌻头文件
  • 🌻功能实现(详细版)
    • 🔎申请结点
    • 🔎递归算法:
      • ✔前序遍历
      • ✔中序遍历
      • ✔后序遍历
    • 🔎求二叉树的总结点数(法一/法二)
    • 🔎二叉树的叶子节点数
    • 🔎求二叉树的高度
    • 🔎求k层上的结点个数(k>=1)
  • 🌻功能实现(全部代码)
  • 🌻测试代码
    • 家人们,点个![请添加图片描述](https://img-blog.csdnimg.cn/11dae7d2dd1b46b2b021edaccee67cf1.jpeg)再走呗~

🌻头文件

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdio.h>
#include<stdlib.h>


#define DataType int

typedef struct tree
{
	DataType a;
	struct tree* left;
	struct tree* right;
}tree;


//申请一个节点
tree* BuyNode(DataType x);

//二叉树:
//前序遍历
void PreOrder(tree* t);
//中序遍历
void InOrder(tree* t);
//后序遍历
void PostOrder(tree* t);


//求二叉树的节点数1
int TreeSize1(tree* t);
//求二叉树的节点数2
int TreeSize2(tree* t);

//叶子节点数
int TreeLeafSize(tree* t);

//求二叉树的高度
int TreeHeight(tree* t);

//求k层上的节点个数  k >=1	
int TreeLevelSize(tree* t,int k);

🌻功能实现(详细版)

🔎申请结点

//申请一个节点
tree* BuyNode(DataType x)
{
	tree* d = (tree*)malloc(sizeof(tree));
	if (d == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	d->a = x;
	d->left = d->right = NULL;
	return d;
}

🔎递归算法:

✔前序遍历

//二叉树的前序遍历
void PreOrder(tree* t)
{
	if (t == NULL)
	{
		printf("# ");
		return;
	}
	else 
	{
		printf("%d ",t->a);
		PreOrder(t->left);
		PreOrder(t->right);
	}
}

✔中序遍历

//中序遍历
void InOrder(tree* t)
{
	if (t == NULL)
	{
		printf("\n");
		return;
	}
	else
	{
		PreOrder(t->left);
		printf("%d ", t->a);
		PreOrder(t->right);
	}
}

✔后序遍历

//后序遍历
void PostOrder(tree* t)
{
	if (t == NULL)
	{
		printf("\n");
		return;
	}
	else
	{
		PreOrder(t->left);
		PreOrder(t->right);
		printf("%d ", t->a);
	}
}

🔎求二叉树的总结点数(法一/法二)

int size = 0;
//求二叉树的节点数1
int TreeSize1(tree* t)
{
	if (t == NULL)
		return;

	size++;
	TreeSize1(t->left);
	TreeSize1(t->right);

	return size;
}

//求二叉树的节点数2
int TreeSize2(tree* t)
{
	return t == NULL ? 0 :
		TreeSize2(t->left) + TreeSize2(t->right) + 1;
}

🔎二叉树的叶子节点数

//叶子节点数
int TreeLeafSize(tree* t)
{
	if (t == NULL)
	{
		return 0;
	}
	if (t->left == NULL && t->right == NULL)
	{
		return 1;
	}
	return TreeLeafSize(t->left) + TreeLeafSize(t->right);
}

🔎求二叉树的高度

//求二叉树的高度
int TreeHeight(tree* t)
{
	if (t == NULL)
		return 0;
	int leftT = TreeHeight(t->left);
	int rightT = TreeHeight(t->right);
	return (leftT > rightT ? leftT : rightT) + 1;
}

🔎求k层上的结点个数(k>=1)

//求k层上的节点个数  k >=1	
int TreeLevelSize(tree* t, int k)
{
	if (t == NULL)
		return 0;
	if (k == 1)
	{
		return 1;
	}
	return TreeLevelSize(t->left, k - 1) + TreeLevelSize(t->right, k - 1);
}

🌻功能实现(全部代码)

#define _CRT_SECURE_NO_WARNINGS
#include"tree.h"

//申请一个节点
tree* BuyNode(DataType x)
{
	tree* d = (tree*)malloc(sizeof(tree));
	if (d == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}
	d->a = x;
	d->left = d->right = NULL;
	return d;
}
//****************递归算法*******************************

//二叉树的前序遍历
void PreOrder(tree* t)
{
	if (t == NULL)
	{
		printf("# ");
		return;
	}
	else 
	{
		printf("%d ",t->a);
		PreOrder(t->left);
		PreOrder(t->right);
	}
}

//中序遍历
void InOrder(tree* t)
{
	if (t == NULL)
	{
		printf("\n");
		return;
	}
	else
	{
		PreOrder(t->left);
		printf("%d ", t->a);
		PreOrder(t->right);
	}
}

//后序遍历
void PostOrder(tree* t)
{
	if (t == NULL)
	{
		printf("\n");
		return;
	}
	else
	{
		PreOrder(t->left);
		PreOrder(t->right);
		printf("%d ", t->a);
	}
}

int size = 0;
//求二叉树的节点数
int TreeSize1(tree* t)
{
	if (t == NULL)
		return;

	size++;
	TreeSize1(t->left);
	TreeSize1(t->right);

	return size;
}

//求二叉树的节点数
int TreeSize2(tree* t)
{
	return t == NULL ? 0 :
		TreeSize2(t->left) + TreeSize2(t->right) + 1;
}

//叶子节点数
int TreeLeafSize(tree* t)
{
	if (t == NULL)
	{
		return 0;
	}
	if (t->left == NULL && t->right == NULL)
	{
		return 1;
	}
	return TreeLeafSize(t->left) + TreeLeafSize(t->right);
}

//求二叉树的高度
int TreeHeight(tree* t)
{
	if (t == NULL)
		return 0;
	int leftT = TreeHeight(t->left);
	int rightT = TreeHeight(t->right);
	return (leftT > rightT ? leftT : rightT) + 1;
}

//求k层上的节点个数  k >=1	
int TreeLevelSize(tree* t, int k)
{
	if (t == NULL)
		return 0;
	if (k == 1)
	{
		return 1;
	}
	return TreeLevelSize(t->left, k - 1) + TreeLevelSize(t->right, k - 1);
}

🌻测试代码

#define _CRT_SECURE_NO_WARNINGS
#include"tree.h"


test01()
{
	tree* n1 = BuyNode(1);
	tree* n2 = BuyNode(2);
	tree* n3 = BuyNode(3);
	tree* n4 = BuyNode(4);
	tree* n5 = BuyNode(5);
	tree* n6 = BuyNode(6);
	n1->left = n2;
	n2->left = n4;
	n2->right = n5;
	n1->right = n3;
	n3->left = n6;
	printf("二叉树的前序遍历结果为:");
	PreOrder(n1);
	printf("\n");

	
	printf("结点个数为:%d\n", TreeSize1(n1));
	printf("结点个数为:%d\n",TreeSize2(n1));
	printf("叶子节点个数为:%d\n",TreeLeafSize(n1));
	printf("二叉树的高度为:%d\n",TreeHeight(n1));
	printf("第k层上的节点数为:%d\n", TreeLevelSize(n1, 2));
}

int main()
{
	test01();
	system("pause");
	return 0;
}

感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~

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

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

相关文章

计算机基础数据结构和算法动态可视化展示网站收录

计算机中有很多数据结构、算法对于小白来说非常难理解&#xff0c;交互式动画一步步展示整个过程可以帮助我们快速准确地理解这些算法。我们整理了12个可动态交互和展示常见数据结构和排序、图算法等网站&#xff0c;总计12个 收录到 webhub123​www.webhub123.com/#/home/de…

C 学习笔记 —— 内存操作函数

文章目录 内存操作函数memcpy实例 memmove内存重叠问题 memcmp实例 memset不能任意赋值 参考资料 内存操作函数 内存操作函数也是在<string.h>头文件中的 四个内存函数&#xff1a; memcpy(内存拷贝&#xff09; memmove&#xff08;内存移动&#xff09; memcmp&#…

C++ 期末冲刺3h

C 1. 基础程序 #include "iostream" // C头文件 #include "stdio.h" // C 头文件 //using namespace std; // 命名空间// main() 是程序开始执行的地方int main() {std::cout << "Hello, World!" << "\n";return 0; …

Jenkins持续集成之windows下安装jenkins

官方地址&#xff1a; https://jenkins.io/download/ 安装jenkins 下载windows和linux通用的war包 启动 Jenkins 将 jenkins.war 放到 tomcat安装目录/webapps 下 访问 http://127.0.0.1:8080/jenkins 我这里因为之前已经走过初始化步骤了&#xff0c;所以直接进去了主界面…

Datacom-HCIE 题库 03(10月26日更新)--含解析

单选题 1.[试题编号&#xff1a;189810] &#xff08;单选题&#xff09;SSH算法协商阶段中&#xff0c;双方交换自身所支持的算法列表。SSH服务器的对称加密算法列表依次为:aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc。SSH客户端的对称加密算法列表依次为&#xff1a;aes1…

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析 第一题: 在源程序“小蝙蝠”文件中,实现小蝙蝠遇到不同的角色会说不同的话,以及切换不同的造型要求: 1:游戏开始时,小蝙蝠角色是造型 a,并能够用键盘控制上、下、左、右移动; 2:移动小蝙蝠,距离角色雪…

利用列表推导式遍历子目录PDF文件

一、问题的提出 之前&#xff0c;我们探索了如何用Python来遍历子目录文件&#xff0c;详情可以见下面的文章&#xff1a; PythonFan&#xff1a;Python遍历子目录文件的多种方法5 赞同 0 评论文章正在上传…重新上传取消https://zhuanlan.zhihu.com/p/609327324 以上方面有…

t检验.医学统计实例详解

t检验是医学统计学中常用的一种假设检验方法&#xff0c;用于比较两个样本均值是否有显著差异。它可以帮助医学研究者确定一个治疗方法或药物是否显著地改善了患者的症状或生理指标。 在医学研究中&#xff0c;t检验常被用来&#xff1a; 比较两个独立样本的均值&#xff1a;…

这个 归并排序详解过程 我能吹一辈子!!!

文章目录 归并排序概念归并排序算法思路归并排序递归实现归并排序非递归实现 归并排序概念 1945年&#xff0c;约翰冯诺依曼&#xff08;John von Neumann&#xff09;发明了归并排序&#xff0c;这是典型的分治算法的应用。 归并排序&#xff08;Merge sort&#xff09;是建立…

【2023秋招】华为od22-12-14三道题(思路+代码)

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Godot引擎 4.0 文档 - 循序渐进教程 - 监听玩家输入

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Listening to player input — Godot Engine (stable) documentation in English 监听玩家输入 在上一课创建您的第一个脚本的基础上&#xff0c;让我们看看任何游戏…

Linux基本指令实现4及热键指令详解

目录 Linux热键补充&#xff1a; 1.bc指令&#xff1a; Tab键的智能补充&#xff1a; ctrlc键&#xff1a; uname指令&#xff1a; lscpu指令&#xff1a; lsmem指令&#xff1a; df -h指令&#xff1a; 关机指令&#xff1a; 扩展指令&#xff1a; Linux热键补充&#…

【MySQL通关之旅】从山脚到山顶(傲视群雄版)

查 基本查询 select 查询指定 name,age 字段并返回 select name,age from 表名 查询所有字段并返回 select * from 表名 查询指定 name,age 字段并起别名(姓名,性别) 返回 select name as ‘姓名’,age as ‘性别’ from 表名 去除某字段重复记录 select distinct 字段名 from…

RSA数学基础 连分数

前言 最近在学rsa,补一下连分数 定义 形如 a 0 1 a 1 1 a 2 1 a 3 1 … a_{0}\frac{1}{a_{1}\frac{1}{a_{2}\frac{1}{a_{3}\frac{1}{\ldots}}}} a0​a1​a2​a3​…1​1​1​1​ 的分数 连分数分为有限连分数无限连分数 如上是一个无限连分数 任何一个有理数都可以表示…

【youcans 的图像处理学习课】21. Haar 小波变换

专栏地址&#xff1a;『youcans 的图像处理学习课』 文章目录&#xff1a;『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】21. Haar 小波变换 1. 小波变换1.1 小波变换基本概念例程 17_1&#xff1a;常用小波族的图像 1.2 连续小波变换1.3 离散小波变换&a…

【C生万物】 字符串内存函数篇 (下)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 承接上篇&#xff0c;在认识了常用的字符串和内存函数后&#xff0c;带大家实现几个函…

idea把项目上传到码云

1. 为项目创建仓库 2. 选中中项目右击git, 先add, 在commit Directory 3. 设置远程码云项目地址 4. push项目, ok。 注意&#xff1a; 如果你在最后push出现以下提示&#xff0c;则说明提交失败 Push to origin/master was rejected(译文&#xff1a;推送到原点/master被拒绝…

联合阿里在职测开工程师耗时一个星期写的 【接口测试+自动化接口接口测试详解]

前言&#xff1a; 兄弟们如果本文让你感觉能学到东西就麻烦各位动动发财的手来个一键三连&#xff0c;听说点赞&#xff0c;收藏&#xff0c;评论&#xff0c;关注的兄弟已经跳槽涨薪发财了哦。 【文章末尾给大家留下了大量的福利】 1&#xff1a;json模块的使用  字典是一种…

华为OD机试真题 Java 实现【最大花费金额】【2023Q1】

一、题目描述 双十一众多商品进行打折销售&#xff0c;小明想购买自己心仪的一些物品&#xff0c;但由于受购买资金限制&#xff0c;所以他决定从众多心仪商品中购买三件&#xff0c;而且想尽可能的花完资金。 现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。 …

MMDetection 3D入门

MMDetection 3D入门 文章目录 MMDetection 3D入门介绍架构模块核心模块与相关组件公共基础模块 依赖安装最佳实践验证安装 测试数据create_data.py修改数据目录 train.py整体流程命令行参数配置文件中为什么传入参数是 dictRunner函数中参数含义结合图示来理清其中数据的流向与…