#c实现二叉树的建立以及遍历
typedef struct BiTree {
char data;
struct Ltree* Lch, * Rch;
}LTree,* QLTree;
QLTree create_tree(QLTree T) { //遍历方法创建二叉树
char c;
scanf("请输入结点的数据:%c", &c);
if (c == '#') {
T = NULL;
}
else {
(T) = (QLTree)malloc(sizeof(LTree));
(T)->data = c;
create_tree((T)->Lch); //递归建立左子树
create_tree((T)->Rch); //递归建立右子树
}
return T;
}
void PreOrderTraverse(QLTree T) { //先序方法递归方法遍历二叉树
if (T == NULL) {
return T;
}
else {
pritf("%c\n", T->data); //打印根节点
PreOrderTraverse(T->Lch); //遍历左子树
PreOrderTraverse(T->Rch); //遍历右子树
}
}
QLTree InOrderTraverse(QLTree T) { //中序遍历递归遍历二叉树
if (T == NULL) {
return T;
}
else {
InOrderTraverse(T->Lch); //遍历左子树
printf("%c,",T->data); //打印根节点
InOrderTrease(T->Rch); //遍历右子树
}
return T;
}
QLTree PostOrderTravse(QLTree T) { //后序遍历二叉树
if (T == NULL) {
printf("Tree is empty");
return T;
}
else {
PostOrderTravse(T->Lch); //遍历左子树
PostOrderTravse(T->Rch); //遍历右子树
printf("%c,", T->data); //打印根节点的数据
}
return T;
}
//非递归遍历二叉树
QLTree InOrderTravse2(QLTree T){ //中序遍历
Stack S = CreateStack(); //创建一个栈用于保存二叉树的节点;ps:栈方法 不在本篇中
Push(S,T); //将根节点入栈
while(T!=NULL&&!Empty(T)){
while(T!=NULL){ //直到左子树为空时停止
Push(S,T); //将节点入栈
T = T->Lch; //取左子树
}
if(!Empty(S)){ //栈不为空
T=Pop(S); //从栈中弹出一个元素
printf("%c,",T->data); //输出
T=->T->Rch; //去右子树
}
}