- 如果使用动态创建二叉树需要使用递归,故使用静态的方式创建二叉树
- 代码如下:
//链式二叉树
///使用静态创建二叉树
#include<stdio.h>
#include<malloc.h>
//定义 二叉树的数据结构
typedef struct binaryTree{
char value;//存储的值
struct binaryTree *leftChild;//左孩子
struct binaryTree *rightChild;//右孩子
} BINARYTREE,*PBINARYTREE;
//静态方法初始化二叉树
void creatBinaryTree(PBINARYTREE pRoot ){
//先将该树所有的结点都创建出来
PBINARYTREE pB = (PBINARYTREE)malloc(sizeof(BINARYTREE));
PBINARYTREE pC = (PBINARYTREE)malloc(sizeof(BINARYTREE));
PBINARYTREE pD = (PBINARYTREE)malloc(sizeof(BINARYTREE));
PBINARYTREE pE = (PBINARYTREE)malloc(sizeof(BINARYTREE));
//开始进行结点连接
pRoot->value='A';
pRoot->leftChild=pB;
pRoot->rightChild=pC;
pB->value='B';
pB->leftChild=NULL;
pB->rightChild=NULL;
pC->value='C';
pC->leftChild=pD;
pC->rightChild=NULL;
pD->value='D';
pD->leftChild=NULL;
pD->rightChild=pE;
pE->value='E';
pE->leftChild=NULL;
pE->rightChild=NULL;
}
//二叉树的先序遍历
void preShow(PBINARYTREE pRoot){
/*
1.先遍历根节点
2.然后先序遍历左子树
3.再然后先序遍历右子树
注意:必须要满足该节点非空才能遍历
*/
if(pRoot!=NULL){
printf("%c\n",pRoot->value);
}
if(NULL!=pRoot->leftChild){
preShow(pRoot->leftChild);
}
if(NULL!=pRoot->rightChild){
preShow(pRoot->rightChild);
}
}
//中序遍历
void inShow(PBINARYTREE pRoot)
{
//中序遍历左子树
if(pRoot->leftChild!=NULL){
inShow(pRoot->leftChild) ;
}
//遍历根节点
if(pRoot!=NULL){
printf("%c\n",pRoot->value);
}
// 中序遍历右子树
if(pRoot->rightChild!=NULL){
inShow(pRoot->rightChild);
}
}
//后序遍历
void postShow(PBINARYTREE pRoot)
{
//后续遍历左子树
if(pRoot->leftChild!=NULL)
{
postShow(pRoot->leftChild);
}
//后续遍历右子树
if(pRoot->rightChild){
postShow(pRoot->rightChild);
}
//遍历根节点
printf("%c\n",pRoot->value);
}
int main()
{
//创建根节点
PBINARYTREE root = (PBINARYTREE)malloc(sizeof(BINARYTREE));
//创建二叉树
creatBinaryTree(root);
//先序遍历二叉树
preShow(root);
//中序遍历二叉树
inShow(root);
//后序遍历二叉树
postShow(root);
printf("hello");
return 0;
}