創建二叉樹,根據前序遍歷或根據括號表示法


二叉樹節點:

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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM