输出二叉树叶子结点代码c语言
时间: 2024-12-15 12:28:27 浏览: 12
在C语言中,输出一棵二叉树的所有叶子节点(即没有子节点的节点)可以使用递归的方式来实现。下面是一个简单的示例,假设我们有一个结构体`Node`代表二叉树的节点:
```c
#include <stdio.h>
// 定义二叉树节点结构
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 判断一个节点是否是叶子节点
int isLeaf(Node* node) {
return (node->left == NULL && node->right == NULL);
}
// 递归函数遍历并打印叶子节点
void printLeaves(Node* root) {
if (root == NULL)
return;
// 如果当前节点是叶子节点,则打印
if (isLeaf(root)) {
printf("%d ", root->data);
}
// 递归遍历左子树和右子树
printLeaves(root->left);
printLeaves(root->right);
}
// 主函数测试
int main() {
// 创建一个简单的二叉树实例并设置其节点值
Node* root = (Node*)malloc(sizeof(Node));
root->data = 1;
root->left = (Node*)malloc(sizeof(Node));
root->left->data = 2;
root->right = (Node*)malloc(sizeof(Node));
root->right->data = 3;
root->left->left = NULL;
root->left->right = NULL;
root->right->left = (Node*)malloc(sizeof(Node));
root->right->right = NULL;
root->right->left->data = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
printf("Leaves of the binary tree are:\n");
printLeaves(root);
return 0;
}
```
在这个例子中,`printLeaves`函数会首先检查当前节点是否是叶子,如果是则打印它的数据,然后递归地遍历左右子节点。注意这个代码仅适用于满二叉树的情况,如果二叉树不是完全平衡的,可能会有部分叶子节点无法访问。
阅读全文