#include<stdlib.h>
#include<stdio.h>
typedef struct node
{
struct node * lchild;
struct node * rchild;
int data;
}BiTNode,*BiTree;
/*生成节点*/
BiTNode *MakeNode(int item)
{
BiTNode * pnode = (BiTNode *)malloc(sizeof(BiTNode));
if(pnode)
{
pnode->data = item;
pnode->lchild = NULL;
pnode->rchild = NULL;
}
return pnode;
}
void insert(BiTree *root, BiTree new)
{
BiTree p = *root;
if(NULL == *root)/*只针对root节点*/
{
*root = new;/*!!!!!!二级指针!!!!!*/
return;
}
if(new->data < p->data)
{
if(NULL == p->lchild)/*找到了插入点*/
{
printf("%d<--%d\n", p->data, new->data);
p->lchild = new;
return;
}
else
{
insert(&(p->lchild), new);
}
}
else if(new->data > p->data)
{
if(NULL == p->rchild)/*找到了插入点*/
{
printf("%d-->%d\n", new->data, p->data );
p->rchild = new;
return;
}
else
{
insert(&(p->rchild), new);
}
}
return;
}
/*中序遍历二叉树*/
void InOrderTraverse(BiTree tree )
{
BiTNode * pnode = tree;
if(pnode)
{
InOrderTraverse(pnode->lchild );
printf("%d ", pnode->data);
InOrderTraverse(pnode->rchild );
}
}
void ClearBiTree(BiTree tree)
{
BiTNode * pnode = tree;
if(pnode->lchild!=NULL)
ClearBiTree(pnode->lchild);
if(pnode->rchild!=NULL)
ClearBiTree(pnode->rchild);
if(NULL != pnode)
free(pnode);
}
int main(void )
{
int arr[] = {6, 8, 9, 7, 1, 4, 2, 3, 5, 4, 6, 0};
int i;
BiTree root = NULL;
for(i = 0; i < sizeof(arr)/sizeof(int); i++)
{
insert(&root, MakeNode(arr[i]) );
}
InOrderTraverse(root);
printf("\n\r");
ClearBiTree(root);
return 0;
}