C语言实现二叉树的前序建立、遍历和叶子结点统计
#include <stdio.h> #include <stdlib.h>
// 定义二叉树结点结构体 typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode;
// 前序建立二叉树 TreeNode* createBinaryTree() { TreeNode* root = NULL; int data; scanf('%d', &data); if (data != -1) { root = (TreeNode*)malloc(sizeof(TreeNode)); root->data = data; root->left = createBinaryTree(); root->right = createBinaryTree(); } return root; }
// 前序遍历二叉树 void preOrderTraversal(TreeNode* root) { if (root != NULL) { printf('%d ', root->data); preOrderTraversal(root->left); preOrderTraversal(root->right); } }
// 中序遍历二叉树 void inOrderTraversal(TreeNode* root) { if (root != NULL) { inOrderTraversal(root->left); printf('%d ', root->data); inOrderTraversal(root->right); } }
// 后序遍历二叉树 void postOrderTraversal(TreeNode* root) { if (root != NULL) { postOrderTraversal(root->left); postOrderTraversal(root->right); printf('%d ', root->data); } }
// 统计二叉树叶子结点个数 int countLeafNodes(TreeNode* root) { if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL) { return 1; } return countLeafNodes(root->left) + countLeafNodes(root->right); }
int main() { printf('请输入二叉树的前序序列,-1表示空结点:\n'); TreeNode* root = createBinaryTree();
printf('前序遍历结果:');
preOrderTraversal(root);
printf('\n');
printf('中序遍历结果:');
inOrderTraversal(root);
printf('\n');
printf('后序遍历结果:');
postOrderTraversal(root);
printf('\n');
int leafNodeCount = countLeafNodes(root);
printf('叶子结点个数:%d\n', leafNodeCount);
return 0;
}
原文地址: http://www.cveoy.top/t/topic/f3yu 著作权归作者所有。请勿转载和采集!