目录
作业
二叉树的创建与遍历
binaryTree.h
#ifndef __BINARYTREE_H__
#define __BINARYTREE_H__
// 一般二叉树
#include <stdio.h>
#include <stdlib.h>
#define datatype long
typedef struct binaryTree {
datatype data;
struct binaryTree* left; // 左孩子
struct binaryTree* right; // 右孩子
} binaryTree_t;
/*--------------------------------------------------------------------*/
/// @brief 创建一般二叉树
/// @return 二叉树地址
binaryTree_t* create_general_binaryTree();
/*--------------------------------------------------------------------*/
/// @brief 先序遍历(根左右)
/// @param tree 完全二叉树地址
void preorder_traversal(binaryTree_t* tree);
/// @brief 中序遍历(左根右)
/// @param tree 完全二叉树地址
void inorder_traversal(binaryTree_t* tree);
/// @brief 后序遍历(左右根)
/// @param tree 完全二叉树地址
void postorder_traversal(binaryTree_t* tree);
#endif // !__BINARYTREE
binaryTree.c
#include "binaryTree.h"
// 创建一般二叉树
binaryTree_t* create_general_binaryTree()
{
// 1.输入节点数据
char ch = getchar();
// 2.判断是否为结束符(#)
if (ch == '#') {
return NULL;
}
// 3.创建根节点
binaryTree_t* root;
if ((root = (binaryTree_t*)malloc(sizeof(binaryTree_t))) == NULL) {
printf("create_binaryTree malloc failure\n");
return NULL;
}
// 4.set
root->data = ch;
// 5.设置左孩子
root->left = create_general_binaryTree();
// 6.设置右孩子
root->right = create_general_binaryTree();
return root;
}
// 先序遍历
void preorder_traversal(binaryTree_t* tree)
{
// 递归结束条件
if (tree == NULL) {
return;
}
printf("%c\t", (char)tree->data);
preorder_traversal(tree->left);
preorder_traversal(tree->right);
}
// 中序遍历
void inorder_traversal(binaryTree_t* tree)
{
// 递归结束条件
if (tree == NULL) {
return;
}
inorder_traversal(tree->left);
printf("%c\t", (char)tree->data);
inorder_traversal(tree->right);
}
// 后序遍历
void postorder_traversal(binaryTree_t* tree)
{
// 递归结束条件
if (tree == NULL) {
return;
}
postorder_traversal(tree->left);
postorder_traversal(tree->right);
printf("%c\t", (char)tree->data);
}
main.c
#include "binaryTree.h"
int main(int argc, const char* argv[])
{
// 0.创建一般二叉树
binaryTree_t* tree = create_general_binaryTree();
if (tree == NULL) {
return -1;
}
// 1.先序遍历
puts("先序遍历");
preorder_traversal(tree);
puts("");
// 2.中序遍历
puts("中序遍历");
inorder_traversal(tree);
puts("");
// 3.后序遍历
puts("后序遍历");
postorder_traversal(tree);
puts("");
return 0;
}