初阶数据结构 二叉树常用函数(二)

函数一 求二叉树第K层的节点个数

还是一样 我们假设 K就是等于一

如果说是一个空数的话就返回0

如果说有值的话就返回一个1就可以

假设这个这层既不为空 又不是第K层的话 那么就说明第K层肯定是子树下面

那么就说明是左右子树的第(K-1)层

那么只将它们相加并且返回它们的值就好了

核心代码表示如下

复制代码
//树的第k层个数
//树的第k层个数 = 左子树第k-1层个数+右子树第k-1层个数
int TreeLevle(BTNode* root, int k)
{
	if (root == NULL)
	{
		return 0;
	}
	if (k == 1)
	{
		return 1;
	}
	int leftk = TreeLevle(root->left, k - 1);
	int rightk = TreeLevle(root->right, k - 1);

	return leftk + rightk;
}

我们来看看结果怎么样

函数二求二叉树的深度

这里还是一样 我们先来看图

我们先来看第极限的情况

假如我们的本身就是一个空树的话 我们可以直接返回0

如果不是空树的话我们可以寻找我们的左子树和右子树中的较大值(一样大返回哪一个都可以)

将它们加一后返回就可以

核心代码如下

复制代码
//树的高度
//当前树的高度=左右子树大的那个+1
int TreeHight(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	int leftHight = TreeHight(root->left);
	int rightHight = TreeHight(root->right);

	return leftHight > rightHight ? leftHight + 1 : rightHight + 1;
}

还是一样我们来看看效果

深度是4确实没错

函数三 求某个值为X的节点

还是一样 我们首先考虑极限情况

假设值就在根上

那么我们直接返回根的位置就好了

否则的话我们就往左边右边子树遍历

我们来看看核心代码

复制代码
//二叉树查找值为x的结点
BTNode* TreeFind(BTNode* root, BTDateType x)
{
	if (root == NULL)
	{
		return NULL;
	}
	if (root->data == x)
	{
		return root;
	}
	
	BTNode* lret = TreeFind(root->left, x);
	if(lret)
	return lret;
	
	BTNode* rret = TreeFind(root->right, x);
	if(rret)
	return rret;

	return NULL;
}

我们发现这里可以找出来了

以上就是本篇博客的全部内容啦,如有错误请各位大佬不吝赐教,感谢留言

相关推荐
散峰而望9 分钟前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
躺不平的理查德10 分钟前
时间复杂度与空间复杂度备忘录
数据结构·算法
yaki_ya10 分钟前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法
刃神太酷啦10 分钟前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
挽星安1 小时前
代码随想录算法训练营第五十天|卡码网 99 岛屿数量、卡码网 100 最大岛屿的面积
算法
葫三生1 小时前
《论三生原理》系列构建文理同构的认知体系?
人工智能·科技·深度学习·算法·机器学习·transformer
多加点辣也没关系1 小时前
数据结构与算法|第六章:队列
数据结构·算法·队列
_深海凉_2 小时前
LeetCode热题100-分割回文串
算法·leetcode·职场和发展
我是无敌小恐龙2 小时前
Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结
java·开发语言·数据结构·算法·贪心算法·排序算法·动态规划