二叉树的建立和遍历只需注意递归函数的使用
代码如下:
#include<stdio.h>
#include<malloc.h>
//构建结点域
struct tree{
int data;
struct tree *left;
struct tree *right;
};
typedef struct tree node;
/*
定义插入函数模块
当结点不存在时,生成新的结点并比较左右顺序插入树中
*/
void write(node **tree,int value){
node *temp=NULL;
if(!(*tree)){
temp=(node *)malloc(sizeof(node));
temp->left=temp->right=NULL;
temp->data=value;
*tree=temp;
return;
}
if(value<(*tree)->data){
write(&(*tree)->left,value);
}else if(value>(*tree)->data){
write(&(*tree)->right,value);
}
}
//先序遍历
void first_read(node *tree){
if(tree){
printf("%d\n",tree->data);
first_read(tree->left);
first_read(tree->right);
}
}
//中序遍历
void mid_read(node *tree){
if(tree){
mid_read(tree->left);
printf("%d\n",tree->data);
mid_read(tree->right);
}
}
//后序遍历
void last_read(node *tree){
if(tree){
last_read(tree->left);
last_read(tree->right);
printf("%d\n",tree->data);
}
}
//测试模块
int main(){
node *tree;
node *temp;
tree=NULL;
write(&tree,10);
write(&tree,5);
write(&tree,13);
write(&tree,1);
write(&tree,7);
write(&tree,11);
write(&tree,18);
printf("先序遍历!\n");
first_read(tree);
printf("中序遍历!\n");
mid_read(tree);
printf("后序遍历!\n");
last_read(tree);
return 0;
}
程序结果为下: