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

求链式二叉树第K层的结点数

之前我们写过怎么求叶子结点的个数,叶子结点个数就是求它的左子树的叶子结点,加上柚子树的叶子结点,依次递归下去,可能最难得就是跳出递归的条件,由于是求叶子结点,所以当它的左右子树都为空的时候就返回1,如果是空的树就返回零。同样的,我们要找K层的节点数,所以我们每遍历一层就k-1最后当k==1的时候,就到了第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*BuyNode(BTDataType x)//创建一个新的结点
{
	BTNode*newnode = (BTNode*)malloc(sizeof(BTNode));
	if (newnode == NULL)
	{
		printf("malloc fail\n");
		exit(-1);
	}
	newnode->data = x;
	newnode->left = NULL;
	newnode->right = NULL;
	return newnode;
}
BTNode* CreatBinaryTree()//手动创建一个链式结构的二叉树,
{
	BTNode* node1 = BuyNode(1);
	BTNode* node2 = BuyNode(2);
	BTNode* node3 = BuyNode(3);
	BTNode* node4 = BuyNode(4);
	BTNode* node5 = BuyNode(5);
	BTNode* node6 = BuyNode(6);
	BTNode* node7 = BuyNode(7);
	node1->left = node2;
	node1->right = node4;
	node2->left = node3;
	node4->left = node5;
	node4->right = node6;
	node2->right = node7;
	return node1;
}

首先我们手动的构造一个链式二叉树,如上所示。

int BrinaryKLeverSize(BTNode*root,int k)
{
	assert(k >= 1);//防止我们的K小于1
	if (root == NULL)
	{
		return 0;//当为空的时候,就返回零
	}
	if (k == 1)
	{
		return 1;
	}
	return BrinaryKLeverSize(root->left, k - 1) + BrinaryKLeverSize(root->right, k - 1);加上左子树的节点数和右子树的节点数
}
int main()
{
	BTNode*node = CreatBinaryTree();
	int size = BrinaryKLeverSize(node,3);
	printf("%d ", size);

	return 0;
}

相关文章:

  • 排序之插入排序(图解)
  • 排序之希尔排序(图解)
  • 排序之选择排序(图解)
  • C++之默认参数详解
  • 力扣(两数相加)C语言
  • 力扣(反转二叉树)C语言
  • 力扣-平衡二叉树(C语言)
  • 力扣—对称二叉树(C语言)
  • 牛客网—二叉树遍历(C语言)
  • C++之引用详解
  • c++之模板初阶
  • C++之string源代码详解
  • 电话号码组合(力扣)
  • vim的基本用法
  • 进程的概念(详解)
  • 【Leetcode】104. 二叉树的最大深度
  • 【技术性】Search知识
  • 【译】理解JavaScript:new 关键字
  • 2017-08-04 前端日报
  • Angular6错误 Service: No provider for Renderer2
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java多态
  • java取消线程实例
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mocha测试初探
  • python 装饰器(一)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • text-decoration与color属性
  • vue自定义指令实现v-tap插件
  • web标准化(下)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 优化 Vue 项目编译文件大小
  • postgresql行列转换函数
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​flutter 代码混淆
  • ​io --- 处理流的核心工具​
  • ​ssh免密码登录设置及问题总结
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # .NET Framework中使用命名管道进行进程间通信
  • #Linux(帮助手册)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (一) storm的集群安装与配置
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)winform之ListView
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET CLR Hosting 简介
  • .net/c# memcached 获取所有缓存键(keys)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET框架类在ASP.NET中的使用(2) ——QA