c语言创建一棵二叉树完整代码
时间: 2023-10-03 08:09:20 浏览: 95
c语言构建二叉树
下面是一个简单的C语言二叉树创建和遍历的完整代码,您可以参考一下:
```
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新节点
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 插入节点
void insertNode(TreeNode* root, int val) {
if (root == NULL) {
root = createNode(val);
} else if (val < root->val) {
if (root->left == NULL) {
root->left = createNode(val);
} else {
insertNode(root->left, val);
}
} else {
if (root->right == NULL) {
root->right = createNode(val);
} else {
insertNode(root->right, val);
}
}
}
// 构建二叉树
TreeNode* buildTree(int* vals, int n) {
TreeNode* root = NULL;
for (int i = 0; i < n; i++) {
insertNode(root, vals[i]);
}
return root;
}
// 先序遍历
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 中序遍历
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
int main() {
int vals[] = {5, 2, 7, 1, 3, 6, 8};
int n = sizeof(vals) / sizeof(int);
TreeNode* root = buildTree(vals, n);
printf("先序遍历结果:");
preorderTraversal(root);
printf("\n");
printf("中序遍历结果:");
inorderTraversal(root);
printf("\n");
printf("后序遍历结果:");
postorderTraversal(root);
printf("\n");
return 0;
}
```
在这个示例代码中,我们定义了一个二叉树结构体`TreeNode`,并实现了创建节点、插入节点、构建二叉树、先序遍历、中序遍历和后序遍历等功能函数。在`main`函数中,我们创建了一个二叉树,并分别进行了先序遍历、中序遍历和后序遍历,打印出了遍历结果。
阅读全文