假设二叉树采用二叉链存储结构存储,设计一个算法: 求一棵给定二叉树中的叶子结点个数。 计算二叉树的深度。
时间: 2024-01-23 07:08:57 浏览: 25
好的,针对您的问题,我分别回答:
1. 求一棵给定二叉树中的叶子结点个数的算法如下:
```
int countLeafNodes(TreeNode* root) {
if(root == NULL) {
return 0;
}
if(root->left == NULL && root->right == NULL) {
return 1;
}
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
```
该算法通过递归遍历二叉树,对于每个节点,判断其左右子节点是否为空,如果两个子节点都为空,则该节点为叶子节点,返回1;否则,递归遍历该节点的左右子节点,并将两个子树的叶子节点数相加,即为该节点的叶子节点数。
2. 计算二叉树的深度的算法如下:
```
int maxDepth(TreeNode* root) {
if(root == NULL) {
return 0;
}
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return max(leftDepth, rightDepth) + 1;
}
```
该算法同样采用递归的方式遍历二叉树,对于每个节点,计算其左右子树的深度,并取两者中的较大值,然后加1,即为该节点的深度。最终返回根节点的深度即可。
相关问题
假设二叉树采用二叉链存储结构存储,设计一个算法,输出一棵给定二叉树的所有叶子结点,给出C语言代码
以下是输出给定二叉树的所有叶子结点的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
/* 定义二叉树结构体 */
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
/* 创建二叉树 */
void CreateBiTree(BiTree *T) {
int data;
scanf("%d", &data);
if (data == -1) {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = data;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
/* 输出叶子结点 */
void PrintLeaf(BiTree T) {
if (T) {
if (!T->lchild && !T->rchild) { /* 如果是叶子结点 */
printf("%d ", T->data);
}
PrintLeaf(T->lchild);
PrintLeaf(T->rchild);
}
}
int main() {
BiTree T = NULL;
printf("请输入二叉树的前序遍历序列,-1表示空结点:\n");
CreateBiTree(&T);
printf("叶子结点为:");
PrintLeaf(T);
printf("\n");
return 0;
}
```
在该代码中,CreateBiTree函数用于创建二叉树,PrintLeaf函数用于输出二叉树的所有叶子结点。程序首先输入二叉树的前序遍历序列,然后输出二叉树的所有叶子结点。
假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储设计,一个算法计算一棵树给定二叉树BT中的所有单分支结点个数
好的,针对你的问题,我来给出一个算法:
1. 定义一个计数器count,用来记录单分支结点的个数。
2. 从根节点开始,如果当前节点是空节点,则直接返回0。
3. 如果当前节点只有左儿子或者只有右儿子,则将计数器count加1。
4. 分别递归遍历当前节点的左子树和右子树,将递归结果相加并返回。
5. 最终返回count的值即可。
下面是该算法的Python代码实现:
```python
def count_single_branch_nodes(root):
if not root:
return 0
count = 0
if root.left and not root.right:
count += 1
elif root.right and not root.left:
count += 1
count += count_single_branch_nodes(root.left) + count_single_branch_nodes(root.right)
return count
```
这个算法的时间复杂度是O(n),其中n是二叉树中节点的数量。