用 C语言建立一棵二叉树,输出先序序列、中序遍历序列,统计二叉树的叶结点个数。
时间: 2024-10-29 22:16:41 浏览: 41
数据结构实验报告8-树-求二叉树先序、中序、后序遍历次序的第k个访问结点-实验内容与要求.docx
在C语言中,我们可以使用结构体定义二叉树节点,然后通过递归的方式实现先序遍历(根-左-右)、中序遍历(左-根-右)以及计算叶节点的数量。以下是基础的步骤:
1. **定义二叉树节点**:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
```
2. **创建空树或添加节点**:
```c
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
```
3. **先序遍历**:
```c
void preorderTraversal(TreeNode* root, int result[]) {
if (root != NULL) {
result[preorderIndex] = root->val;
preorderTraversal(root->left, result);
preorderTraversal(root->right, result);
preorderIndex++;
}
}
```
4. **中序遍历**:
```c
void inorderTraversal(TreeNode* root, int result[]) {
if (root != NULL) {
inorderTraversal(root->left, result);
result[inorderIndex] = root->val;
inorderTraversal(root->right, result);
inorderIndex++;
}
}
```
5. **计算叶节点数量**:
```c
int countLeaves(TreeNode* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1;
return countLeaves(root->left) + countLeaves(root->right);
}
```
6. **完整例子**:
```c
// 示例
int main() {
TreeNode* root = createNode(1);
// ...接着插入其他节点...
int preorderResult[100], inorderResult[100];
preorderIndex = inorderIndex = 0;
preorderTraversal(root, preorderResult);
inorderTraversal(root, inorderResult);
printf("先序遍历序列: ");
for (int i = 0; i < preorderIndex; i++) {
printf("%d ", preorderResult[i]);
}
printf("\n中序遍历序列: ");
for (int i = 0; i < inorderIndex; i++) {
printf("%d ", inorderResult[i]);
}
printf("\n叶节点数量: %d\n", countLeaves(root));
return 0;
}
```
阅读全文