#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; }