Recursion 二叉树中高度h的子树

Recursion 二叉树中高度h的子树,recursion,data-structures,binary-tree,subtree,Recursion,Data Structures,Binary Tree,Subtree,我们如何在二叉树中找到高度为“h”的子树的数目。 函数定义为 int子树(节点*根,int k); 其中k是特定高度。首先,我们递归计算树的高度,如下所示: 如果树为空,则高度为0 如果树非空,则高度为其子树的最大高度加1 在C语言中(我假设OP使用的是基于响应的C语言),这看起来像 typedef结构节点{ 节点*leftChild, 节点*rightChild }节点; typedef节点*树; 无符号整数最大值(无符号整数a、无符号整数b){ 返回a>b?a:b; } 无符号整数高度(树)

我们如何在二叉树中找到高度为“h”的子树的数目。 函数定义为 int子树(节点*根,int k);
其中k是特定高度。

首先,我们递归计算树的高度,如下所示:

如果树为空,则高度为0

如果树非空,则高度为其子树的最大高度加1

在C语言中(我假设OP使用的是基于响应的C语言),这看起来像

typedef结构节点{
节点*leftChild,
节点*rightChild
}节点;
typedef节点*树;
无符号整数最大值(无符号整数a、无符号整数b){
返回a>b?a:b;
}
无符号整数高度(树){
返回树?1+max(高度(树->左子树,树->右子树)):0;
}
请注意,通常,
节点
将有一些附加数据。但是这些数据在这里并不相关,所以我们不包括它们(尽管如果你愿意的话,这样做很容易)

现在,我们想稍微修改一下
height
函数。为此,我们定义

typdef结构结果{
无符号整数高度,
无符号整数计数
}结果;
/**
*返回的。高度应为树的高度。
*返回的.count应该是树的子树数
*高度为k。
*/
Result resultCountChildren(树,无符号整数k){
如果(树){
Result leftResult=resultCountChildren(树->左,k);
Result rightResult=resultCountChildren(树->右,k);
无符号int-heightOfTree=1+max(leftResult.height,righresult.height);
无符号整数计数=leftResult.count+rightResult.count+(树高==k);
结果={
.高度=树的高度,
.count=计数
};
返回结果;
}否则{
无符号整数高度=0;
无符号整数计数=(0==k);
结果={
.高度=高度,
.count=计数
};
返回结果;
}
}
无符号整数计数(树形树,无符号整数k){
返回resultCountChildren(树)。计数;
}