层次建立二叉树(类似于二叉树的层次遍历,使用队列)

联想二叉树的层次遍历,也就是弹出当前节点-处理当前节点-左孩子入队(非空)-右孩子入队(非空)。

代码如下(使用c++,但基本用的是C语言的语法)

typedef struct BiTNode{
    TElemType data;
    struct BiTNode* lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree &T){
    char ch;int MaxSize=50;
    BiTree queuep[MaxSize];
    int front=0,rear=0;
    BiTNode *p,*pre=T;
    cin>>ch;
    if(ch=='#'){
        T=NULL;
        cout<<"根节点为空"<data=ch;
        T->lchild=NULL;
        T->rchild=NULL;
    }//处理根节点,类似于层次遍历的处理根节点
    queuep[rear]=T;
    rear=(rear+1)%MaxSize;
    while(front!=rear){
        pre=queuep[front];
        front=(front+1)%MaxSize;
        cin>>ch;
        //        
        //相比于层次遍历,没有了visit部分(因为弹出队列的这个结点本身已经在上一层循环处理过了)
        //
        if(ch!='#'){
            p=(BiTNode*) malloc(sizeof(BiTNode));
            p->data=ch;
            pre->lchild=p;
            queuep[rear]=p;
            rear=(rear+1)%MaxSize;

        } else{
            pre->lchild=NULL;
        }//处理左孩子,类似于层次遍历的出队-处理
        cin>>ch;
        if(ch!='#'){
            p=(BiTNode*) malloc(sizeof(BiTNode));
            p->data=ch;
            pre->rchild=p;
            queuep[rear]=p;
            rear=(rear+1)%MaxSize;
        }
        else{
            pre->rchild=NULL;
        }//处理右孩子

    }
    return OK;//OK是一个常量1
}

你可能感兴趣的:(c++,c语言)