先序遍历:根左右
中序遍历:左根右
后序遍历:左右根
#include <stdio.h>
#include <malloc.h>
typedef struct Treenode {
char data;
struct Treenode* lchild; //左孩子节点
struct Treenode* rchild; //右孩子节点
}*treenode,tree;
void createtree(treenode*roottree) { //二级指针
char ch;
scanf("%c", &ch);
if (ch == ' ') //如果为空格就让该节点为NULL
*roottree = NULL;
else {
*roottree = (treenode)malloc(sizeof(tree)); //开辟一块空间
(*roottree)->data = ch;
createtree(&(*roottree)->lchild); //递归,再次调用该函数
createtree(&(*roottree)->rchild);
}
}
void pretree1(treenode roottree,int index){ //先序遍历
if (roottree != NULL) {
printf("%c 在第%d层\n", roottree->data, index);
pretree1(roottree->lchild, index + 1); //递归,调用该函数
pretree1(roottree->rchild, index + 1);
}
}
void pretree2(treenode roottree, int index) { //中序遍历
if (roottree != NULL) {
pretree2(roottree->lchild, index + 1);
printf("%c 在第%d层\n", roottree->data, index);
pretree2(roottree->rchild, index + 1);
}
}
void pretree3(treenode roottree, int index) { //后序遍历
if (roottree != NULL) {
pretree3(roottree->lchild, index + 1);
pretree3(roottree->rchild, index + 1);
printf("%c 在第%d层\n", roottree->data, index);
}
}
int main()
{
int index = 1; //存储深度
treenode roottree;
createtree(&roottree);
pretree1(roottree,index);
puts("");
pretree2(roottree, index);
puts("");
pretree3(roottree, index);
}
输出: