喜鹊筑巢
#include<stdio.h>
#define max 100
struct node{
struct node *lchild;
struct node *mchild;
struct node *rchild;
int layer;//深度
int index;//序号
int childnum;//孩子数量
int preOrder;
}Nodes[max],*TreeNode;
int needIndex;
int preOrder=1;
int cmp(struct node a,struct node b){
if(a.childnum>b.childnum)
return 1;
else if(a.childnum==b.childnum&&a.layer>b.layer)
return 1;
else if(a.childnum==b.childnum&&a.layer==b.layer&&a.preOrder<b.preOrder)
return 1;
else
return 0;
}
void PreOrder(struct node *root){
root->preOrder=preOrder++;
if(root->lchild!=NULL){
root->lchild->layer=root->layer+1;
PreOrder(root->lchild);
}
if(root->mchild!=NULL){
root->mchild->layer=root->layer+1;
PreOrder(root->mchild);
}
if(root->rchild!=NULL){
root->rchild->layer=root->layer+1;
PreOr