设计算法,输出二叉树每一个叶子结点的值,以及二叉树的深度C语言代码
时间: 2025-01-19 16:07:03 浏览: 41
在C语言中,我们可以创建一个辅助函数来获取每个叶子节点的值和整个二叉树的深度。首先,我们需要定义一个辅助函数`isLeaf()`用于检查一个节点是否为叶子节点,然后创建主函数`getLeavesAndDepth()`来处理这个问题。
假设我们已经有一个二叉树结构`TreeNode`如下:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
下面是实现算法的代码:
```c
int depth(TreeNode* node, int level) {
if (node == NULL)
return level;
return MAX(depth(node->left, level + 1), depth(node->right, level + 1));
}
// 辅助函数判断节点是否为叶子节点
int isLeaf(TreeNode* node) {
return (node->left == NULL && node->right == NULL);
}
// 主函数,输出所有叶子节点的值及整棵树的深度
void getLeavesAndDepth(TreeNode* root) {
int leaves[] = {}; // 存储叶子节点值的数组
int leafCount = 0; // 叶子节点计数
if (root != NULL) {
int depthValue = depth(root, 0);
printf("Tree Depth: %d\n", depthValue);
if (isLeaf(root)) {
leaves[leafCount++] = root->val;
}
if (root->left != NULL || root->right != NULL) {
getLeavesAndDepth(root->left);
getLeavesAndDepth(root->right);
}
}
// 输出所有叶子节点的值
if (leafCount > 0) {
for (int i = 0; i < leafCount; i++) {
printf("Leaf Node Value: %d\n", leaves[i]);
}
}
}
```
这个程序首先计算二叉树的深度,然后通过递归的方式查找并存储所有的叶子节点及其值。最后,如果找到叶子节点,它们会被打印出来。
阅读全文
相关推荐




















