二叉树的4种遍历方法
```c
void PreOrder(tree tr) {
if (!tr) return ;
printf(" %d", tr->data);
PreOrder(tr->lchild);
PreOrder(tr->rchild);
}
void InOrder(tree tr) {
if (!tr) return ;
PreOrder(tr->lchild);
printf(" %d", tr->data);
PreOrder(tr->rchild);
}
void PostOrder(tree tr) {
if (!tr) return ;
PreOrder(tr->lchild);
PreOrder(tr->rchild);
printf(" %d", tr->data);
}
void LayerOrder(tree tr) {
if (!tr) return ;
queue<tree> q;
q.push(tr);
while (!q.empty()) {
tree now = q.front();
q.pop();
printf("%d ", now->data);
if (now->lchild != NULL) q.push(now->lchild);
if (now->rchild != NULL) q.push(now->rchild);
}
}
void LayerOrder(tree tr) {
if(!BT) return ;
tree a[10];
tree b=NULL;
int l=0,r=0;
a[r]=BT;
r = (r+1)%10;
while(r!=l){
b=a[l];
l = (l+1)%10;
printf(" %d",b->Data);
if(b->Left){
a[r]=b->Left;
r = (r+1)%10;
}
if(b->Right){
a[r]=b->Right;
r = (r+1)%10;
}
}
}