思路:利用前序遍历来建树(结点值陆续从键盘输入,用先序遍历的顺序为宜),后序遍历销毁一个树。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
//二叉链表示法
struct _bitTree
{
int data;
struct _bitTree * lchild, *rchild;
};
typedef struct _bitTree BiTNode;
typedef struct _bitTree* BiTreee;
/*先序遍历*/
void preOrder(BiTNode * root)
{
/*先根节点*/
if (root == NULL)
{
return;
}
printf("%c\t", root->data);
/*遍历左子树*/
preOrder(root->lchild);
/*遍历右子树*/
preOrder(root->rchild);
}
BiTNode * CreateTree()
{
BiTNode * node = NULL;
char ch;
scanf("%c",&ch);
if (ch == '#')
{
return NULL;
}
else{
node = (BiTNode*)malloc(sizeof(BiTNode));//创建根节点
if (node == NULL)
{
return NULL;
}
node->data = ch;
node->lchild = CreateTree();//递归创建左子树
node->rchild = CreateTree();//递归创建右子树
return node;
}
}
/*释放内存*/
void FreeTree(BiTNode * T)
{
if (T != NULL)
{
if (T->lchild != NULL)
{
FreeTree(T->lchild);//递归释放左子树
T->lchild = NULL;
}
if (T->rchild != NULL)
{
FreeTree(T->rchild);
T->rchild = NULL;
}
free(T);
T = NULL;
}
}
int main(void)
{
BiTNode * my = NULL;
printf("please input string:");
my = CreateTree();
preOrder(my);
FreeTree(my);
printf("树释放完毕\n");
system("pause");
return 0;
}
结论:通过中序遍历和先序遍历可以确定一个树
通过中序遍历和后续遍历可以确定一个数。
通过先序遍历和后序遍历确定不了一个数。