二叉树的几个递归问题

我的主页:Lei宝啊

愿所有美好如期而遇


前言:

二叉树的递归是二叉树很重要的问题,几乎解决二叉树的问题都要使用递归,接下来我们将解决二叉树几个最基础的递归问题。


目录

前言:

二叉树的前序,中序,后序遍历:

树的结构:

前序递归遍历:

中序递归遍历:

后续递归遍历:

求树的节点数:

求叶子节点数:

第k层节点数:


二叉树的前序,中序,后序遍历:

树的结构:

复制代码
typedef struct BT_Tree
{
	int data;
	struct BT_Tree* left;
	struct BT_Tree* right;
}BT_Tree;

前序递归遍历:

复制代码
void PrevOrder(BT_Tree* node)
{
	if (node == NULL)
		return;

	printf("%d ", node->data);
	PrevOrder(node->left);
	PrevOrder(node->right);		
}

黄瓜个图看看:


中序递归遍历:

复制代码
void InOrder(BT_Tree* node)
{
	if (node == NULL)
		return;
	
	PrevOrder(node->left);
	printf("%d ", node->data);
	PrevOrder(node->right);
}

花瓜个图看看:


后续递归遍历:

复制代码
void LastOrder(BT_Tree* node)
{
	if (node == NULL)
		return;

	PrevOrder(node->left);	
	PrevOrder(node->right);
	printf("%d ", node->data);
}

画个图看看:


求树的节点数:

复制代码
int SizeofNode(BT_Tree* node)
{
	if (node == NULL)
		return 0;

	return SizeofNode(node->left) + SizeofNode(node->right) + 1;
}

画个图:


求叶子节点数:

复制代码
int SizeofLeaf(BT_Tree* node)
{
	if (node == NULL)
		return 0;
	if (node->left == NULL && node->right == NULL)
		return 1;

	return SizeofLeaf(node->left) + SizeofLeaf(node->right);
}

画图:


第k层节点数:

复制代码
int SizeInLineKNode(BT_Tree* node, int k)
{
	if (node == NULL)
		return 0;

	if (k == 1)
		return 1;

	return SizeInLineKNode(node->left, k - 1) + SizeInLineKNode(node->right, k - 1);
}

图:


相关推荐
冻柠檬飞冰走茶5 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
鱼子星_5 小时前
《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
c++·算法·动态规划·递归
红叶舞5 小时前
基于线段树的数据结构
数据结构·python·算法
断点之下6 小时前
从“理扑克牌”到“分组优化”——直接插入排序与希尔排序详解
数据结构·算法·排序算法
起个破名想半天了6 小时前
算法与数据结构之DFS深度优先遍历
数据结构·算法·深度优先
鱼子星_7 小时前
【C++】深入剖析list:list及其双向迭代器实现
开发语言·数据结构·c++·笔记·stl·list
江屿风8 小时前
【C++笔记】【二叉搜索树】流食般投喂
开发语言·数据结构·c++·笔记
爱吃提升16 小时前
MATLAB矩阵运算完全指南:从生成到索引操作
数据结构·matlab·矩阵
小蒋学算法17 小时前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法
神明不懂浪漫1 天前
【第三章】链表
开发语言·数据结构·经验分享·笔记·链表