int GetHeight( BinTree BT ) {
int hl, hr, maxh;
if (BT == NULL) return 0;
hl = GetHeight(BT->Left);
hr = GetHeight(BT->Right);
maxh = hl > hr ? hl : hr;
return maxh + 1;
}//求树的高度
typedef struct queue {
BinTree* data;
int tail, head;
}queue;
queue* getnewqueue(int n) {
queue* q = (queue*)malloc(sizeof(queue));
q->data = (BinTree*)malloc(sizeof(BinTree) * n);
q->head = q->tail = 0;
return q;
}
void InorderTraversal( BinTree BT ){
if (BT == NULL) return;
InorderTraversal(BT->Left);
printf(" %c", BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ){
if (BT == NULL) return;
printf(" %c", BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
if (BT == NULL) return;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c", BT->Data);
}
void LevelorderTraversal( BinTree BT ){
if(BT==NULL) return ;
queue* q = getnewqueue(100);
q->data[q->tail++] = BT;
while (q->head < q->tail) {
BinTree tree = q->data[q->head];
if (tree->Left != NULL) q->data[q->tail++] = tree->Left;
if (tree->Right != NULL) q->data[q->tail++] = tree->Right;
printf(" %c", tree->Data);
q->head++;
}
}
void PreorderPrintLeaves( BinTree BT ){
if(BT==NULL) return ;
if(BT->Left==NULL&&BT->Right==NULL){
printf(" %c",BT->Data);
}
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}