- //二叉树的链式存储
- /
- #include
- #include
- #include
- #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;
- }