一:递归遍历
void Order(Binode* bt) { if(bt==NULL) return; else { cout<<bt->data;//前序遍历 Order(bt->lchild); cout<<bt->data;//中序遍历 Order(bt->rchild); cout<<bt->data;//后序遍历 } }
二:非递归遍历
前序遍历
void PreOrder(Binode* bt) { //采用顺序栈,假定不会发生上溢 int top=-1; Binode* S[100]; while(bt!=NULL||top!=-1)//两条件都不成立说明遍历结束了 { while(bt!=NULL) { cout<<bt->data; S[++top]=bt; bt=bt->lchild; } if(top!=-1)//栈非空 { bt=S[top--]; bt=bt->rchild; } } }
中序遍历
void InOrder(Binode * bt) { int top=-1; Binode* A[100]; while(bt!=NULL||top!=-1) { while(bt!=NULL) { A[++top]=bt; bt=bt->lchild; } if(top!=-1) { bt=S[top--]; cout<<bt->data; bt=bt->rchild; } } }
后序遍历
struct element { Binode* ptr; int flag; } void PostOrder(Binode* bt) { int top=-1; element A[100]; while(bt!=NULL||top!=-1) { while(bt!=NULL) { top++; A[top].ptr=bt; A[top].flag=1; bt=bt->lchild; } while(top!=-1&&A[top].flag==2)//第二次出栈的结点才能访问 { bt=A[top--].ptr; cout<<bt->data; } if(top!=-1) { A[top].flag=2; bt=A[top].ptr->rchild; } } }
层序遍历
void LeverOrder(Binode *bt) { Binode* Q[100]; int front,rear; front=rear=-1; if(root==NULL) return; Q[++rear]=bt; while(front!=rear) { Binode* q=Q[++front]; cout<<q.data; if(q->lchild!=NULL) Q[++rear]=q->lchild; if(q->rchild!=NULL) Q[++rear]=q->rchild; } }