用C语言代码编写程序实现“假设二叉树采用二叉链存储结构存储,试设计一个算法,输出一棵给定二树的所有叶子结点。”
时间: 2024-10-26 07:02:26 浏览: 49
在C语言中,我们可以使用递归的方式来实现遍历二叉树并找到所有叶子节点。这里提供一个简单的广度优先搜索(BFS)和深度优先搜索(DFS)的示例:
**广度优先搜索(BFS):**
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 定义队列结构体
typedef struct Queue {
TreeNode **queue_data;
int front;
int rear;
int capacity;
} Queue;
void initQueue(Queue *q, int capacity) {
q->queue_data = (TreeNode **)malloc(capacity * sizeof(TreeNode *));
q->front = -1;
q->rear = -1;
q->capacity = capacity;
}
// 判断是否为叶子节点
int isLeaf(TreeNode* node) {
return (node->left == NULL && node->right == NULL);
}
// 广度优先遍历
void bfsPrintLeaves(TreeNode* root) {
if (root == NULL) return;
Queue q;
initQueue(&q, 10); // 初始化队列容量
q.queue_data[0] = root; // 入队根节点
while (q.front != q.rear) {
TreeNode *current = q.queue_data[q.front++];
if (isLeaf(current)) {
printf("%d ", current->val); // 输出叶子节点
}
if (current->left) {
q.queue_data[q.rear++] = current->left;
}
if (current->right) {
q.queue_data[q.rear++] = current->right;
}
}
free(q.queue_data);
}
// 示例主函数
int main() {
// 假设你已经有了一个二叉树的创建和初始化过程
TreeNode *root = ...;
bfsPrintLeaves(root);
return 0;
}
```
**深度优先搜索(DFS):**
```c
void dfsPrintLeaves(TreeNode* root, bool visited[]) {
if (root == NULL || visited[root->val]) return;
visited[root->val] = true;
if (isLeaf(root)) {
printf("%d ", root->val); // 输出叶子节点
}
dfsPrintLeaves(root->left, visited);
dfsPrintLeaves(root->right, visited);
}
int main() {
TreeNode *root = ...;
int visited[] = {false, false}; // 初始化访问数组
dfsPrintLeaves(root, visited);
return 0;
}
```
在这两个示例中,你需要替换`TreeNode`结构体的定义,并处理好二叉树的创建和初始化部分。运行上述代码即可得到所有叶子节点的值。
阅读全文