二叉树的几个递归问题

我的主页: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);
}

图:


相关推荐
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠3 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾3 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8213 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q3 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒3 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记3 天前
单项不带头不循环链表
数据结构·链表
小糯米6013 天前
JS 数组
数据结构·算法·排序算法
小欣加油3 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒3 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode