当前位置: 首页 > 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的基本用法
  • 进程的概念(详解)
  • [译]如何构建服务器端web组件,为何要构建?
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • flutter的key在widget list的作用以及必要性
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript对象详解
  • Java知识点总结(JavaIO-打印流)
  • js ES6 求数组的交集,并集,还有差集
  • js写一个简单的选项卡
  • Linux后台研发超实用命令总结
  • Objective-C 中关联引用的概念
  • React 快速上手 - 07 前端路由 react-router
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SQL 难点解决:记录的引用
  • Sublime Text 2/3 绑定Eclipse快捷键
  • yii2中session跨域名的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端面试题总结
  • 区块链技术特点之去中心化特性
  • 全栈开发——Linux
  • 如何设计一个比特币钱包服务
  • 一、python与pycharm的安装
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 容器镜像
  • #162 (Div. 2)
  • #QT(串口助手-界面)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)STL算法之搜索
  • (39)STM32——FLASH闪存
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (分类)KNN算法- 参数调优
  • (七)Java对象在Hibernate持久化层的状态
  • (一)appium-desktop定位元素原理
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (轉貼) UML中文FAQ (OO) (UML)