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;
} 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/f3yq 著作权归作者所有。请勿转载和采集!