用c语言求一颗二叉树的深度和输出所有结点的个数
时间: 2024-12-24 09:20:23 浏览: 5
在C语言中,计算一棵二叉树的深度和结点总数,通常需要递归方法。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算二叉树深度
int maxDepth(TreeNode* root) {
if (root == NULL) return 0; // 空树的深度为0
else {
int left_depth = maxDepth(root->left); // 左子树深度
int right_depth = maxDepth(root->right); // 右子树深度
return (left_depth > right_depth ? left_depth : right_depth) + 1; // 返回较大值加1作为当前层深
}
}
// 计算二叉树结点总数
int countNodes(TreeNode* root) {
if (root == NULL) return 0; // 空树无节点
else {
return 1 + countNodes(root->left) + countNodes(root->right); // 本节点加左子树加右子树节点数
}
}
int main() {
// 创建并初始化一个二叉树...
TreeNode* root = ...;
int depth = maxDepth(root);
printf("二叉树的最大深度是: %d\n", depth);
int nodes = countNodes(root);
printf("二叉树的节点总数是: %d\n", nodes);
return 0;
}
```
在这个代码中,`maxDepth`函数通过递归地比较左右子树的深度来确定整个树的深度,而`countNodes`函数则是递归地计数每个节点,包括自身。
阅读全文