使用C++ 编写函数实现二叉树的创建以及先序、中序、后序遍历
时间: 2024-01-14 13:02:54 浏览: 73
二叉树的结构体定义如下:
```c
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
创建二叉树的函数如下:
```c
TreeNode* create_tree() {
int value;
scanf("%d", &value);
if (value == -1) { // 如果输入-1,表示该节点为NULL
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); // 分配节点内存
node->data = value; // 保存节点数据
node->left = create_tree(); // 创建左子树
node->right = create_tree(); // 创建右子树
return node; // 返回该节点
}
```
先序遍历函数如下:
```c
void preorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data); // 先输出根节点
preorder_traversal(root->left); // 再遍历左子树
preorder_traversal(root->right); // 最后遍历右子树
}
```
中序遍历函数如下:
```c
void inorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorder_traversal(root->left); // 先遍历左子树
printf("%d ", root->data); // 再输出根节点
inorder_traversal(root->right); // 最后遍历右子树
}
```
后序遍历函数如下:
```c
void postorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorder_traversal(root->left); // 先遍历左子树
postorder_traversal(root->right); // 再遍历右子树
printf("%d ", root->data); // 最后输出根节点
}
```
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
TreeNode* create_tree() {
int value;
scanf("%d", &value);
if (value == -1) {
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = value;
node->left = create_tree();
node->right = create_tree();
return node;
}
void preorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preorder_traversal(root->left);
preorder_traversal(root->right);
}
void inorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorder_traversal(root->left);
printf("%d ", root->data);
inorder_traversal(root->right);
}
void postorder_traversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorder_traversal(root->left);
postorder_traversal(root->right);
printf("%d ", root->data);
}
int main() {
printf("请输入二叉树的结点值(-1表示空节点):\n");
TreeNode* root = create_tree();
printf("先序遍历:");
preorder_traversal(root);
printf("\n中序遍历:");
inorder_traversal(root);
printf("\n后序遍历:");
postorder_traversal(root);
printf("\n");
return 0;
}
```
阅读全文