二叉树遍历
- 前序遍历
- 中序遍历
- 后续遍历
代码实现
#include <stdio.h>
#include <stdlib.h>
typedef struct BitNode {
char data;
struct BitNode *lchild, *rchild;
} BitNode, *BiTree;
// void createBiTree(BiTree *T)
// {
// char ch;
// scanf("%c", &ch);
// if (ch == '#')
// {
// *T = NULL;
// } else {
// *T = (BitNode*)(malloc(sizeof(BitNode)));
// (*T)->data = ch;
// createBiTree(&((*T)->lchild));
// createBiTree(&((*T)->rchild));
// }
// }
void CreateBiTree(BiTree *T)
{
char ch;
scanf("%c",&ch);
if(ch=='#') {
// printf("%p\n", T);
*T=NULL;
// printf("%s\n", "11122");
}
else
{
*T=(BiTree )malloc(sizeof(BitNode));
// printf("222: %p\n", T);
if(!*T)
exit(-1);
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
//前序遍历
void preorderTraverse(BiTree T)
{
if (T != NULL)
{
printf("%c ", T->data);
preorderTraverse(T->lchild);
preorderTraverse(T->rchild);
}
}
//中序遍历
void middleOrderTraverse(BiTree T)
{
if (T != NULL)
{
middleOrderTraverse(T->lchild);
printf("%c ", T->data);
middleOrderTraverse(T->rchild);
}
}
//后序遍历
void postOrderTraverse(BiTree T)
{
if (T != NULL) {
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
printf("%c ", T->data);
}
}
int main(int argc, char const *argv[])
{
BiTree T;
//创建二叉树
CreateBiTree(&T);
postOrderTraverse(T);
return 0;
}
运行结果
构建树的模型:
后序遍历
后续
非递归实现