#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
#define MAX_SIZE 100
typedef struct Tree
{
int data[MAX_SIZE];
int size;
}Tree;
//初始化
void InitTree(Tree* root)
{
root->size = 0;
}
//检查是否满
int IsFullTree(Tree* root)
{
return root->size == MAX_SIZE;
}
//检查是否空
int EmptyTree(Tree* root)
{
return root->size == 0;
}
//插入节点
void insertTree(Tree* root,int val)
{
if (IsFullTree(root))
{
printf("数组满,无法添加数据\n");
return;
}
root->data[root->size++] = val;
}
//先序遍历
void preorderTraversal(Tree* root, int index)
{
if (EmptyTree(root) || index >= root->size)
{
return;
}
printf("%d ", root->data[index]);//1
preorderTraversal(root, 2 * index + 1);
preorderTraversal(root, 2 * index + 2);
}
//中序遍历
void inorderTraversal(Tree* root, int index)
{
if (EmptyTree(root) || index >= root->size)
{
return;
}
inorderTraversal(root, 2*index+1);
printf("%d ", root->data[index]);
inorderTraversal(root, 2 * index + 2);
}
//后序遍历
void postorderTraversal(Tree* root, int index)
{
if (EmptyTree(root) || index >= root->size)
{
return;
}
postorderTraversal(root, 2 * index + 1);
postorderTraversal(root, 2 * index + 2);
printf("%d ", root->data[index]);
}
int main()
{
Tree root;
InitTree(&root);
insertTree(&root, 1);
insertTree(&root, 2);
insertTree(&root, 3);
insertTree(&root, 4);
insertTree(&root, 5);
insertTree(&root, 6);
insertTree(&root, 7);
printf("先序遍历如下\n");
preorderTraversal(&root, 0);
printf("\n");
printf("中序遍历如下\n");
inorderTraversal(&root, 0);
printf("\n");
printf("后序遍历如下\n");
postorderTraversal(&root, 0);
return 0;
}
数据结构二叉树的顺序遍历(C语言代码)
最新推荐文章于 2024-11-02 20:41:42 发布