二叉樹節點:
typedef struct node{ elemType data; struct node *lchild; struct node *rchild; }BTNode;
輸入前序遍歷序列建立二叉樹,空節點為空格:
//根據前序遍歷建立二叉樹 int create(BTNode *&T){ elemType ch; scanf("%c",&ch); if(ch==' ') T=NULL; else{ T=(BTNode*)malloc(sizeof(BTNode)); T->data=ch; create(T->lchild); create(T->rchild); } return 1; }
根據樹的括號表示法建立二叉樹:
//根據括號表示法創建二叉樹 void create2(BTNode *&root,char *str){ root=NULL; BTNode *p; int i=0,k=0; stack<BTNode*> s; char ch=str[i]; while(ch!='\0'){ switch(ch){ case '(':{ s.push(p); k=1; //下次添加左孩子節點 break; } case ',':{ k=2; //下次添加右孩子節點 break; } case ')':{ s.pop(); break; } default:{ p=(BTNode*)malloc(sizeof(BTNode)); p->lchild=p->rchild=NULL; p->data=ch; if(root==NULL) root=p; else{ if(k==1){ s.top()->lchild=p; }else if(k==2) s.top()->rchild=p; } break; } } ch=str[++i]; } }
測試:
輸入 "ABD G CE F "
int main(){ BTNode *T; //輸入前序遍歷建立二叉樹 create(T); //層次遍歷輸出二叉樹 levelorder(T); return 0; }
int main(){ BTNode *T; //括號表示法建立二叉樹 create2(T,"A(B(D(,G)),C(E,F))"); //層次遍歷輸出二叉樹 levelorder(T); return 0; }