用c语言编写完整可运行代码实现以下功能1、用前序方法建立一棵二叉树。2、编写前序遍历二叉树的程序。3、编写中序遍历二叉树的程序。4、编写后序遍历二叉树的程序。5、编写统计二叉树叶子结点个数的程序
#include <stdio.h> #include <stdlib.h>
// 定义二叉树结点结构体 typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode;
// 前序建立二叉树 TreeNode* createTree() { int data; scanf("%d", &data); if (data == 0) { return NULL; } else { TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = data; node->left = createTree(); node->right = createTree(); return node; } }
// 前序遍历二叉树 void preorderTraversal(TreeNode* root) { if (root == NULL) { return; } printf("%d ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); }
// 中序遍历二叉树 void inorderTraversal(TreeNode* root) { if (root == NULL) { return; } inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); }
// 后序遍历二叉树 void postorderTraversal(TreeNode* root) { if (root == NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->data); }
// 统计二叉树叶子结点个数 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); }
int main() { printf("请输入前序遍历序列构建二叉树(0表示空结点):\n"); TreeNode* root = createTree();
printf("前序遍历结果:");
preorderTraversal(root);
printf("\n");
printf("中序遍历结果:");
inorderTraversal(root);
printf("\n");
printf("后序遍历结果:");
postorderTraversal(root);
printf("\n");
int leaves = countLeaves(root);
printf("叶子结点个数:%d\n", leaves);
return 0;
原文地址: https://www.cveoy.top/t/topic/hzPR 著作权归作者所有。请勿转载和采集!