#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int data_t;
typedef struct node
{
data_t data;
struct node * lchild;
struct node * rchild;
}tree;
/*********************************************
*功能:创建二叉树
*********************************************/
tree * createTree(int i, int n)
{
tree * root = (tree *)malloc(sizeof(tree));
if(root == NULL)
{
perror("malloc");
return NULL;
}
root->data = i;
if(i*2 <= n)
root->lchild = createTree(2*i, n);
else
root->lchild =NULL;
if(2*i+1 <= n)
root->rchild = createTree(2*i+1,n);
else
root->rchild = NULL;
return root;
}
/*********************************************
*功能:先序遍历
*********************************************/
void dlr(tree *root)
{
//f(root == NULL)
// return;
printf("%d ",root->data);
dlr(root->lchild);
dlr(root->rchild);
}
/*********************************************
*功能:中序遍历
*********************************************/
void ldr(tree * root)
{
if(root == NULL)
return;
ldr(root->lchild);
printf("%d ",root->data);
ldr(root->rchild);
}
/*********************************************
*功能:后序遍历
*********************************************/
void lrd(tree * root)
{
if(root == NULL)
return;
lrd(root->lchild);
lrd(root->rchild);
printf("%d ",root->data);
}
/*********************************************
*功能:层次遍历
*********************************************/
void level(tree * root)
{
if(root == NULL)
return;
//创建队列
tree * queue[100] = {NULL};
//队列初始化
int front =0, rear = 0;
//根节点入队
queue[rear++] = root;
//循环
while(rear != front)
{
//节点出队
tree *p = queue[front++];
//访问该节点
printf("%d ",p->data);
//左右孩子入队
if(p->lchild != NULL)
{
queue[rear++] = p->lchild;
}
if(p->rchild != NULL)
{
queue[rear++] = p->rchild;
}
}
}
/*********************************************
*功能:主函数.
*********************************************/
int main(int argc, char *argv[])
{
tree * root = createTree(1,12);
if(root == NULL)
{
perror("malloc");
return -1;
}
puts("先序遍历");
dlr(root);
puts("");
puts("中序遍历");
ldr(root);
puts("");
puts("后序遍历");
lrd(root);
puts("");
puts("层次遍历");
level(root);
puts("");
return 0;
}
(代码备个份)