//二叉树的链式存储
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 1000
typedef char TDatatype;
typedef struct BiTNode {
TDatatype data;
struct BiTNode* leftchild;
struct BiTNode* rightchild;
struct BiTNode* parent;
}BiTNode,*BiTree;
//前序遍历算法
void PreOrderTraverse(BiTree T);
//中序遍历算法
void InOrderTraverse(BiTree T);
//后续遍历算法
void PostOrderTraverse(BiTree T);
//利用拓展二叉树(#法)的先序排列确定一棵二叉树
void CreateBiTree(BiTree* T,char* arr);
//int index = 0;//用来表示这个先序序列走到哪一位了
//BiTree.c
void PreOrderTraverse(BiTree T)
{
if (T == NULL)
{
return;
}
printf("%c ", T->data);
PreOrderTraverse(T->leftchild);
PreOrderTraverse(T->rightchild);
}
void InOrderTraverse(BiTree T)
{
if (T == NULL)
{
return;
}
InOrderTraverse(T->leftchild);
printf("%c ", T->data);
InOrderTraverse(T->rightchild);
}
void PostOrderTraverse(BiTree T)
{
if (T == NULL)
{
return;
}
PostOrderTraverse(T->leftchild);
PostOrderTraverse(T->rightchild);
printf("%c ", T->data);
}
int indexs= 0;//用一个全局变量来表示遍历到那个序列的哪个位置了
void CreateBiTree(BiTree* T,char* arr)
{
char ch = arr[indexs++];
if (ch == '#')
{
*T = NULL;
return;
}
else
{
BiTree tmp = (BiTree)malloc(sizeof(BiTNode));
if (tmp == NULL)
{
printf("malloc fault\n");
exit(-1);
}
*T = tmp;
(*T)->data = ch;
//CreateBiTree(&((tmp)->leftchild),arr);
//CreateBiTree(&((tmp)->rightchild),arr);
}
CreateBiTree(&((*T)->leftchild),arr);
CreateBiTree(&((*T)->rightchild),arr);
}
void test1()
{
BiTree testree;
printf("请输入这棵二叉树的拓展二叉树(#法)的先序排列\n");
char arr[2 * MAXSIZE + 2] = { 0 };
scanf("%s", arr);
CreateBiTree(&testree,arr);
PreOrderTraverse(testree);
printf("\n");
// InOrderTraverse(testree);
// printf("\n");
// PostOrderTraverse(testree);
}
int main()
{
test1();
return 0;
}
数据结构-二叉树的递归遍历
最新推荐文章于 2023-11-09 21:20:04 发布