C语言实现二叉查找树及遍历算法 | 前序、中序、后序、层序遍历
#include <stdio.h>\n#include <stdlib.h>\n\n// 二叉树结点定义\ntypedef struct TreeNode {\n int data;\n struct TreeNode* left;\n struct TreeNode* right;\n} TreeNode;\n\n// 创建一个二叉查找树结点\nTreeNode* createNode(int data) {\n TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));\n if (newNode == NULL) {\n printf("Memory allocation failed!\n");\n exit(1);\n }\n newNode->data = data;\n newNode->left = NULL;\n newNode->right = NULL;\n return newNode;\n}\n\n// 向二叉查找树中插入结点\nTreeNode* insertNode(TreeNode* root, int data) {\n if (root == NULL) {\n return createNode(data);\n }\n if (data < root->data) {\n root->left = insertNode(root->left, data);\n }\n else if (data > root->data) {\n root->right = insertNode(root->right, data);\n }\n return root;\n}\n\n// 前序遍历\nvoid preOrderTraversal(TreeNode* root) {\n if (root != NULL) {\n printf("%d ", root->data);\n preOrderTraversal(root->left);\n preOrderTraversal(root->right);\n }\n}\n\n// 中序遍历\nvoid inOrderTraversal(TreeNode* root) {\n if (root != NULL) {\n inOrderTraversal(root->left);\n printf("%d ", root->data);\n inOrderTraversal(root->right);\n }\n}\n\n// 后序遍历\nvoid postOrderTraversal(TreeNode* root) {\n if (root != NULL) {\n postOrderTraversal(root->left);\n postOrderTraversal(root->right);\n printf("%d ", root->data);\n }\n}\n\n// 层序遍历\nvoid levelOrderTraversal(TreeNode* root) {\n if (root == NULL) {\n return;\n }\n TreeNode* queue[100];\n int front = 0, rear = 0;\n queue[rear++] = root;\n while (front < rear) {\n TreeNode* node = queue[front++];\n printf("%d ", node->data);\n if (node->left != NULL) {\n queue[rear++] = node->left;\n }\n if (node->right != NULL) {\n queue[rear++] = node->right;\n }\n }\n}\n\nint main() {\n TreeNode* root = NULL;\n int data;\n printf("Enter numbers to insert into the binary search tree (0 to stop):\n");\n while (1) {\n scanf("%d", &data);\n if (data == 0) {\n break;\n }\n root = insertNode(root, data);\n }\n printf("Preorder traversal: ");\n preOrderTraversal(root);\n printf("\n");\n\n printf("Inorder traversal: ");\n inOrderTraversal(root);\n printf("\n");\n\n printf("Postorder traversal: ");\n postOrderTraversal(root);\n printf("\n");\n\n printf("Levelorder traversal: ");\n levelOrderTraversal(root);\n printf("\n");\n\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/pZk8 著作权归作者所有。请勿转载和采集!