二叉树(4)——二叉树链式结构的实现和递归思想(2)

有了昨天的铺垫,今天就很简单了。先把昨天二叉树的代码复制一下,今天还要用。

代码:

typedef int datatype;
typedef struct BinaryTree
{
	datatype _data;
	struct BinaryTree* _left;
	struct BinaryTree* _right;
}BT;

BT* CreatNode(datatype x)
{
	BT* newnode = (BT*)malloc(sizeof(BT));
	if (newnode == NULL)
	{
		perror("malloc");
		return;
	}
	newnode->_left = NULL;
	newnode->_right = NULL;
	newnode->_data = x;
	return newnode;
}
BT* CreatBinaryTree()
{
	BT* node1 = CreatNode(1);
	BT* node2 = CreatNode(2);
	BT* node3 = CreatNode(3);
	BT* node4 = CreatNode(4);
	BT* node5 = CreatNode(5);
	BT* node6 = CreatNode(6);
	node1->_left = node2;
	node1->_right = node4;
	node2->_left = node3;
	node4->_left = node5;
	node4->_right = node6;
	return node1;
}

二叉树节点个数

代码如下:

int BinaryTreeSize(BT* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return BinaryTreeSize(root->_left) + BinaryTreeSize(root->_right) + 1;
}

我们看下运行结果:

这个是递归的思想,不懂的小伙伴可以画一下递归图就懂了。不过,相信各位小伙伴昨天应该就弄懂递归的思想了,今天这个游刃有余了。

二叉树叶子节点个数

代码如下:

int BinaryTreeLeafSize(BT* root)
{
	if (root == NULL)
	{
		return 0;
	}
	if (root->_left == NULL && root->_right == NULL)
	{
		return 1;
	}
	return BinaryTreeLeafSize(root->_left) + BinaryTreeLeafSize(root->_right);
}

我们看下运行结果:

这个也是递归思想,看不懂的小伙伴们,画画递归图就看懂了。

二叉树第k层节点个数

代码如下:

int BinaryTreeLevelKSize(BT* root, int k)
{
    assert(k>0);
	if (root == NULL)
	{
		return 0;
	}
	if (k == 1)
	{
		return 1;
	}
	return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);
}

运行一下,当k=3、k=2和k=4时:

这道题可能会有点想不出来,这里给一下解题思路。

1 当root==null时,无论k=多少,结果都是0.

2 root != null时,且k=1时,输出1.

3 k>0时,就是输出左子树k-1和右子树k-1的结果(这句就是递归的思想)。

4 可以画画图。

这部分递归的题,没有思路很正常,多做几道题就可以了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享63个节日PPT,总有一款适合您

分享63个节日PPT,总有一款适合您 63个节日PPT下载链接:https://pan.baidu.com/s/1kZeiN06KbevtSCs5vXm6oA?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…

宝塔+php+ssh+vscode+虚拟机 远程调试

远程(虚拟机)宝塔 安装扩展 配置文件添加,zend_extension看你虚拟机的具体位置 [Xdebug] zend_extension/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so xdebug.modedebug xdebug.start_with_requesttrigger xdebug.client_host&quo…

windows+vscode配置远程Linux开发环境

1.Linux运行sshd服务 安装openssh-server sudo apt install openssh-server 开启服务 sudo service ssh start 检查sshd是否开启 sudo ps -aux | grep sshd 2.vscode上安装RemoteDevelopment插件 其他依赖性会自动安装 3.配置远程Linux主机信息 Linux主机ip 4.在vscode…

用 Delphi 程序调用 Python 代码画曲线图

用 Python 的库画图 Python 代码如下: import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25]; plt.plot(squares); plt.grid(True) # 网格线 plt.show(); # 这句话会弹出个窗口出来,里面是上述数据的曲线。 把以上代码,放进 PyS…

5分钟掌握接口自动化测试,4个知识点简单易学!

一. 什么是接口测试 接口测试是一种软件测试方法,用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中,测试人员会发送请求并检查接收到的响应,以确保接口在不同场景下都能正常工作。 就工具而言,常见的测试工具有…

DBNet详解及训练ICDAR2015数据集

论文地址:https://arxiv.org/pdf/1911.08947.pdf 开源代码pytorch版本:GitHub - WenmuZhou/DBNet.pytorch: A pytorch re-implementation of Real-time Scene Text Detection with Differentiable Binarization 前言 在这篇论文之前,文字检…

07.你还在手动部署代码吗

如今的项目或者个人项目中,大家的代码怎么部署呢?公司一般都有完整的持续集成以及持续交付平台,对于小公司可能也有各自搭建了一些,比如jenkins,以及gitlab集成的gitlab-ci等等,这些都可以完成我们部署的工作甚至是测试集成等等一系列流水化工作。 但是,即使如此,我依…

R语言学习case12:ggplot 置信区间(多线型)

接上文:多条曲线 R语言学习case11:ggplot 置信区间(包含多子图) 在ggplot2中,每个geom函数都接受一个映射参数。然而,并非每个美学属性都适用于每个geom。你可以设置点的形状,但不能设置线的“…

从雪花到分形几何

目录 前言雪花曲线分形几何雪花曲线工程化参考文献前言 新一股寒潮来袭,河南,安徽,重庆,湖北,湖南北部等地都飘起了大雪,一夜的功夫,世界银装素裹,雪白雪白的,好不美丽迷人。 雪花曲线 物理学上,雪花是一种晶体,是天空中的水汽经凝华而来的固态降水,结构随温度…

Go语言深度解析:探索 crypto/md5 标准库的强大功能

Go语言深度解析:探索 crypto/md5 标准库的强大功能 引言Go语言和MD5的基础知识MD5算法简介Go语言概述Go中的MD5实现 crypto/md5 库的使用方法基本用法处理大型数据安全注意事项 实际案例分析示例1:文件的MD5校验示例2:网络数据的MD5哈希示例3…

BZOJ0481. 树的重心之砍树Link Cut Centroids

题目 思路 分类讨论。 首先当树只有一个重心的时候,我们删掉最小的边再加上原边即可. 再看有两个重心的情况. 显然这棵树必定是类似这样的: 即删掉 A 后,以B 为根的子树是剩下的最大连通块,反之亦然. 那就可以得到一个结论: 删掉边 (A,B) 后,两棵树的大小相等. 那我们只…

【机器学习】某闯关类手游用户流失预测

Final Project: 某闯关类手游用户流失预测 1 案例简介 手游在当下的日常娱乐中占据着主导性地位,成为人们生活中放松身心的一种有效途径。近年来,各种类型的手游,尤其是闯关类的休闲手游,由于其对碎片化时间的利用取得了非常广泛…

HomeAssistant系统添加HACS插件商店与远程控制家中智能家居

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 基本条件…

国图公考:公务员面试资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料: 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…

YoloV8改进策略:Neck改进:HAM混合注意力机制改进YoloV8|多种改进,多种姿势涨点|代码注释详解

摘要 HAM通过快速一维卷积来缓解通道注意机制的负担,并引入通道分离技术自适应强调重要特征。HAM作为通用模块,在CIFAR-10、CIFAR-100和STL-10数据集上实现了SOTA级别的分类性能。 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320322002667?vi…

网工内推 | 网络工程师,需持有HCIE,最高16K,午餐补贴

01 科电数据 招聘岗位:网络工程师 职责描述: 1、负责网络及相关安全产品和技术,熟悉相关主流设备(路由器、交换机、防火墙、IPS/IDS、WAF、VPN、负载均衡、网闸)实施维护、安全加固及优化配置技术; 2、负责…

linux中的gdb调试

gdb是在程序运行的结果与预期不符合时,可以使用gdb进行调试 注意:使用gdb调试时要在编译上加-g参数 gcc -g -c hello.c 启动gdb调试: gdb file 对gdb进行调试 设置运行参数: set args 可指定运行参数 show args 可以查…

Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)

目录 **Spring5** 框架新功能系列一Spring 5.0 框架自带了通用的日志封装Spring5 **框架核心容器**支持Nullable **注解****Spring5** **核心容器支持函数式风格** GenericApplicationContext**Spring5** **支持整合** JUnit5感谢阅读 开篇: 欢迎再次来到 Spring 5 学习系列&am…

Windows如何安装Node.js环境并制作贪吃蛇小游戏分享好友远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

ICC2:polygon命令与复杂power plan

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: ICC2&#x