#include
#include
#define N 6
//构建一个二叉树的结构体,数据,左孩子,右孩子
typedef struct btree
{
int data;
struct btree *lchild;
struct btree *rchild;
}BTREE;
//创建一个二叉树的空节点,没有左右孩子
BTREE *space_node(int data)
{
BTREE *tree;
tree = (BTREE *)malloc(sizeof(BTREE));
tree->data = data;
tree->lchild = tree->rchild = NULL;
return tree;
}
//创建一个二叉树
BTREE *create_binarytree(int num)
{
BTREE *root;
//创建树的节点
root = space_node(num);
//在判断是这个节点是左孩子 还是右孩子
if(2 * root->data <= N)
{
root->lchild = create_binarytree(2 * root->data);
}
if(2 * root->data + 1 <= N)
{
root->rchild = create_binarytree(2 * root->data + 1);
}
在把填充的二叉树返回
return root;
}
//树的前序遍历
void PreOrder(BTREE *tree)
{
if(tree == NULL)
return;
printf("%d ",tree->data);
PreOrder(tree->lchild);
PreOrder(tree->rchild);
return;
}
//树的前序遍历
void InOrder(BTREE *tree)
{
if(tree == NULL)
return;
InOrder(tree->lchild);
printf("%d ",tree->data);
InOrder(tree->rchild);
return;
}
//树的后序遍历
void PostOrder(BTREE *tree)
{
if(tree == NULL)
return;
PostOrder(tree->lchild);
PostOrder(tree->rchild);
printf("%d ",tree->data);
return;
}
//树的层次遍历 运用上了队列技术
int NoOrder(BTREE *root)
{
BTREE *temp;
LinkQueue*q = create_empty_queue();
EnterQueue(q,root);
while(!is_empty_queue(q))
{
temp = DeleteQueue(q);
printf("%d ", temp->data);
if(temp->lchild != NULL)
{
EnterQueue(q,temp->lchild);
}
if(temp->rchild != NULL)
{
EnterQueue(q,temp->rchild);
}
}
return 0;
}
//主函数 实现 创建二叉树 前序 中序 后序 层次遍历来实现二叉树的遍历
int main(int argc, const char *argv[])
{
BTREE *root;
root = create_binarytree(1);
#if 0
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
#endif
NoOrder(root);
printf("\n");
return 0;
}
阅读(4217) | 评论(0) | 转发(0) |