您的位置:首页 > 其它

实现二叉树先序、中序、后序遍历

2017-06-02 17:42 441 查看
根节点:没有父节点的节点

这里需要使用到递归

先序:根->左->右

中序:左->根->右

后序:左->右->根

代码实现:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 遍历 递归
相关文章推荐