根节点:没有父节点的节点
这里需要使用到递归
先序:根->左->右
中序:左->根->右
后序:左->右->根
代码实现:
#include <stdio.h>
#include <stdlib.h>
struct node{//结点类型
int data;
struct node* left;
struct node* right;
};
typedef struct node Node;
Node* creat_node(int d){
Node* pn;
pn = malloc(sizeof(Node));
pn->data = d;
pn->left = pn->right = NULL;
return pn;
}
void creat_tree(Node** t){
int d;
Node* pn = NULL;
scanf("%d",&d);
if(d == 0)
return;
pn = creat_node(d);
*t = pn;
creat_tree( &((*t)->left) );
creat_tree( &((*t)->right) );
}
void ptravel(Node* t){
if(t == NULL) return;
printf("%d ",t->data);//根
ptravel(t->left);//左
ptravel(t->right);//右
}
void pre_travel(Node* t){
printf("pre_travel:");
ptravel(t);
printf("\n");
}
void mtravel(Node* t){
if(t == NULL) return;
mtravel(t->left);//左
printf("%d ",t->data);//根
mtravel(t->right);//右
}
void mid_travel(Node* t){
printf("mid_travel:");
mtravel(t);
printf("\n");
}
void ltravel(Node* t){
if(t == NULL) return;
ltravel(t->left);//左
ltravel(t->right);//右
printf("%d ",t->data);//根
}
void lst_travel(Node* t){
printf("lst_travel:");
ltravel(t);
printf("\n");
}
int main(){
// int a[10] = {1,9,87,66,4,5,2,3,99,-38};
Node* tree = NULL;
creat_tree(&tree);
pre_travel(tree);//先序遍历
mid_travel(tree);//中
lst_travel(tree);//后
return 0;
}