实现二叉树先序、中序、后序遍历
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;
}
这里需要使用到递归
先序:根->左->右
中序:左->根->右
后序:左->右->根
代码实现:
#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;
}
相关文章推荐
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 二叉树的非递归前序、中序以及后序遍历C++模版类实现
- 二叉树先序、中序、后序遍历的非递归实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 二叉树前序、中序、后序遍历的递归与非递归算法实现
- [转]非递归实现二叉树的前序,中序,后序遍历
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的建立以及前序、中序、后序遍历的递归和非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树的实现及先序、中序、后序遍历
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式