用c语言设计一个程序,假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法,输出二叉树b中第k层上的所有叶子结点(1≤k≤二叉树高度)
时间: 2024-11-15 09:30:49 浏览: 21
数据结构与算法基础课程 C语言C++程序语言设计教程 4_1串 共18页.pptx
好的,下面是一个用C语言实现的程序,它假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。程序设计了一个算法来输出二叉树b中第k层上的所有叶子结点(1≤k≤二叉树高度)。
首先,我们定义二叉树的节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建新节点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (!newNode) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 计算二叉树的高度
int treeHeight(TreeNode* root) {
if (root == NULL) {
return 0;
} else {
int leftHeight = treeHeight(root->left);
int rightHeight = treeHeight(root->right);
return (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
}
}
// 打印第k层的叶子节点
void printLeafNodesAtLevelK(TreeNode* root, int k) {
if (root == NULL) {
return;
}
if (k == 1 && root->left == NULL && root->right == NULL) {
printf("%c ", root->data);
return;
}
if (k > 1) {
printLeafNodesAtLevelK(root->left, k - 1);
printLeafNodesAtLevelK(root->right, k - 1);
}
}
int main() {
// 构建示例二叉树
TreeNode* root = createNode('A');
root->left = createNode('B');
root->right = createNode('C');
root->left->left = createNode('D');
root->left->right = createNode('E');
root->right->left = createNode('F');
root->right->right = createNode('G');
root->left->left->left = createNode('H');
root->left->left->right = createNode('I');
int k = 3; // 指定要输出的层数
int height = treeHeight(root);
if (k > height) {
printf("指定的层数超过二叉树的高度\n");
} else {
printf("第%d层上的叶子节点是: ", k);
printLeafNodesAtLevelK(root, k);
printf("\n");
}
return 0;
}
```
### 代码说明:
1. **TreeNode结构体**:定义了二叉树节点的结构,包括数据域和左右子节点指针。
2. **createNode函数**:用于创建一个新的二叉树节点。
3. **treeHeight函数**:递归计算二叉树的高度。
4. **printLeafNodesAtLevelK函数**:递归地查找并打印第k层的叶子节点。如果当前节点是叶子节点且在第k层,则打印该节点的数据。
5. **main函数**:构建一个示例二叉树,并调用相关函数来输出第k层的叶子节点。
这个程序通过递归的方法遍历二叉树,并在指定层找到所有叶子节点并打印出来。希望这对你有帮助!
阅读全文