C語言按層次遍歷二叉樹算法
#define MaxSize 1000 typedef char ElemType; typedef struct node { ElemType data; struct node lchild; struct node rchild; } BTNode; //創建二叉樹 void CreateBTNode(BTNode &b,char str) { BTNode St[MaxSize],p=NULL; int top=-1,k,j=0; char ch; b=NULL; ch=str[j]; while(ch!='\0') { switch(ch) { case '(':top++;St[top]=p;k=1;break; case ')':top--;break; case ',':k=2;break; default:p=(BTNode )malloc(sizeof(BTNode)); p->data=ch;p->lchild=p->rchild=NULL; if(b==NULL) b=p; else { switch(k) { case 1:St[top]->lchild=p;break; case 2:St[top]->rchild=p;break; }
}
}
j++; ch=str[j]; }
} //層次遍歷算法 void LevelOrder(BTNode b) { BTNode p; BTNode qu[MaxSize]; int front,rear; front=rear=-1; rear++; qu[rear]=b; while(front != rear) { front=(front+1)%MaxSize; p=qu[front]; printf("%c ",p->data);if(p->lchild!=NULL) { rear=(rear+1)%MaxSize; qu[rear]=p->lchild; } if(p->rchild!=NULL) { rear=(rear+1)%MaxSize; qu[rear]=p->rchild; } }
}
//主函數 int main() { BTNode b,h; char s[MaxSize] = "A(B(D(,G)),C(E,F))";
CreateBTNode(b,s); printf("層次遍歷算法的訪問次序為:"); LevelOrder(b); printf("\n請輸入二叉樹括號表示法字符串:\n"); return 0;
} </pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!