#include<iostream>
#include<cstring>
#include <stdio.h>
#include<stdlib.h>
using namespace std;
typedef char ElementType;
typedef struct BinaryTreeNode
{
ElementType Data;
struct BinaryTreeNode *lChild, *rChild;
}BinaryTreeNode;
BinaryTreeNode* PreCreateBt(BinaryTreeNode* &t) //先序创建二叉树
{
char ch;
ch = getchar();
fflush(stdin);
if (ch == '#')
t=NULL;
else
{
t = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
t->Data = ch;
printf("请输入左孩子:\n");
t->lChild = PreCreateBt(t->lChild);
printf("请输入右孩子:\n");
t->rChild = PreCreateBt(t->rChild);
}
return t;
}
void PreOrderTransverse(BinaryTreeNode *t) //先序遍历
{
if(t == NULL)
return;
printf("%c ",t->Data);
PreOrderTransverse(t->lChild);
PreOrderTransverse(t->rChild);
}
void InOrderTransverse(BinaryTreeNode *t) //中序遍历
{
if(t == NULL)
return;
InOrderTransverse(t->lChild);
printf("%c ",t->Data);
InOrderTransverse(t->rChild);
}
void PostOrderTransverse(BinaryTreeNode *t) //后序遍历
{
if(t == NULL)
return;
PostOrderTransverse(t->lChild);
PostOrderTransverse(t->rChild);
printf("%c ",t->Data);
}
int main()
{
BinaryTreeNode *t;
printf("请输入根节点的数值:\n");
PreCreateBt(t);
printf("Created!\n");
PreOrderTransverse(t);
printf("\nPreOrderTransverse Done!\n");
InOrderTransverse(t);
printf("\nInOrderTransverse Done!\n");
PostOrderTransverse(t);
printf("\nPostOrderTransverse Done!");
return 0;
}
二叉树的先序创建、先序遍历、中序遍历、后序遍历
最新推荐文章于 2022-10-18 14:52:44 发布