C语言实现二叉树:建立、遍历及统计叶子结点
#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; } TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->data = data; root->left = createTree(); root->right = createTree(); return root; }
// 前序遍历二叉树 void preOrder(TreeNode* root) { if (root == NULL) { return; } printf("%d ", root->data); preOrder(root->left); preOrder(root->right); }
// 中序遍历二叉树 void inOrder(TreeNode* root) { if (root == NULL) { return; } inOrder(root->left); printf("%d ", root->data); inOrder(root->right); }
// 后序遍历二叉树 void postOrder(TreeNode* root) { if (root == NULL) { return; } postOrder(root->left); postOrder(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("前序遍历结果:");
preOrder(root);
printf("\n");
printf("中序遍历结果:");
inOrder(root);
printf("\n");
printf("后序遍历结果:");
postOrder(root);
printf("\n");
int leaves = countLeaves(root);
printf("叶子结点个数:%d\n", leaves);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/f3yv 著作权归作者所有。请勿转载和采集!