BTree.h:
#ifndef _BTREE_H_
#define _BTREE_H_
//二叉树的结点数据类型
typedef struct _btreeNode
{
int data;
struct _btreeNode *lchild; //???
struct _btreeNode *rchild; //指向右孩子结点的指针
}BTreeNode;
//创建二叉树的根结点,即可创建一个二叉树
typedef struct _btree
{
BTreeNode *root; //指向根结点的指针,代表二叉树
int count; //统计二叉树结点的个数
}BTree;
//创建二叉树,实际就是创建一个 BTree 结点
BTree *creatBTree();
//插入结点
//参数
//b :二叉树
//data :数据
//pos :路径 0 代表左 1 代表右 路径从右往左看6:100 代表路径 左左右
//count :步数
//flag :挂在结点的左边还是右边 0 代表左 1代表 右
int BTree_insert(BTree *b,char data,int pos,int count,int flag);
//前序遍历
void pre_order(BTreeNode *root);
//中序遍历
void mid_order(BTreeNode *root);
//后序遍历
void last_order(BTreeNode *root);
#endif
BTree.c
#include<stdlib.h>
#include"BTree.h"
#include<assert.h>
BTree *creatBTree()
{
//创建二叉树
BTree *btree=(BTree *)malloc(sizeof(BTree)/sizeof(char));
assert(btree);
//对二叉树进行初始化
btree->root=NULL;
btree->count=0;
return btree;
}
//插入新节点
int BTree_insert(BTree *b,char data,int pos,int count,int flag)
{
assert(b);
//创建新结点
BTreeNode *node=(BTreeNode *)malloc(sizeof(BTreeNode)/sizeof(char));
assert(node);
//结点初始化
node->data=data;
node->lchild=NULL;
node->rchild=NULL;
int way;//当前要走的路
BTreeNode *current=b->root;
//找插入位置的父结点 pos:2 count=3
while(count!=0)
{
way=pos&1;
pos=pos>>1;
if(way==0) //往左走
current=current->lchild;
else //往右走
current=current->rchild;
count--;
}
if(current==NULL) //刚开始插入时
b->root=node; //新结点成为了新建二叉树的根结点
else
{
if(flag==0)
{
node->lchild=current->lchild;
current->lchild=node;
}
else
{
node->rchild=current->rchild;
current->rchild=node;
}
}
b->count++; //结点个数加1
return 0;
}
//前序 根左右
void pre_order(BTreeNode *root)
{
if(root==NULL)
return;
printf("%-4c",root->data);
pre_order(root->lchild);
pre_order(root->rchild);
}
//中序 左根右
void mid_order(BTreeNode *root)
{
if(root==NULL)
return;
mid_order(root->lchild);
printf("%-4c",root->data);
mid_order(root->rchild);
}
//后序 左右根
void last_order(BTreeNode *root)
{
if(root==NULL)
return;
last_order(root->lchild);
last_order(root->rchild);
printf("%-4c",root->data);
}
main.c
#include<stdio.h>
#include"BTree.h"
int main()
{
BTree *btree=creatBTree();
int BTree_insert(btree,'A',0,0,0);
int BTree_insert(btree,'B',0,0,0);
int BTree_insert(btree,'C',1,0,1);
int BTree_insert(btree,'D',0,1,0);
int BTree_insert(btree,'E',0,1,1);
int BTree_insert(btree,'F',1,1,0);
int BTree_insert(btree,'G',1,1,1);
int BTree_insert(btree,'H',1,2,1);
pre_order(btree->root);
printf("\n");
mid_order(btree->root);
printf("\n");
last_order(btree->root);
printf("\n");
return 0;
}