1.二叉查找树的创建(左比根小,右比根大)
BinaryNode* CreateBinaryTree(int a[],int n){ //数据存在数组a中
int i;
BinaryNode *root,*newp,*cp,*parent; //newp当前正在创建的结点,cp和parent寻找当前父结点
root=NULL;
for(i=0;i<n;i++){
newp=(BinaryNode*)malloc(sizeof(BinaryNode));
newp->left=newp->right=NULL;
newp->data=a[i];
if(root==NULL){
root=newp;
}
else{
cp=root;
while(cp){ //寻找当前结点
parent=cp;
if(newp->data<cp->data)
cp=cp->left; //左比根小
else
cp=cp->right;
}
if(newp->data<parent->data)
parent->left=newp;
else
parent->right=newp;
}
}
return root;
}
2.层序遍历
void OrderPrint(BinaryNode *root,int n){
BinaryNode **queue; //指针队列
BinaryNode *pa;
int front,rear;
rear=front=0;
queue=(BinaryNode**)malloc(sizeof(BinaryNode*)*n);
queue[++rear]=root; //root入队
while(rear!=front){ //判断队列是否为空
pa=queue[++front]; //当前父结点出队
printf("%d\t",pa->data);
if(pa->left)
queue[++rear]=pa->left; //左结点入队
if(pa->right)
queue[++rear]=pa->right; //右结点入队
}
}