广义表创建二叉树(二叉链表)

广义表创建二叉树(二叉链表

本文为非递归法,稍稍复杂一些

1.注意先创建节点再赋值,避免空指针异常 ( t->lc=new BiTNode; t=t->lc;
2.★注意创建节点时先将其左右子树赋为NULL

//广义表创建二叉树
void BTreeCreate(BT &t,char a[],int n)
{
     
    SS S;
    StackCreate(S);
    int i=1,j;
    t=new BiTNode;
    t->data=a[0];
    while(i<n)
    {
     
        if((a[i]=='(')&&Push(S,t))
        {
     
            j=1;
        }
        else if((a[i]==',')&&SVisit(S,t))
        {
     
            j=0;
        }
        else if((a[i]==')')&&Pop(S,t)) {
     }
        else if(a[i]=='#')
        {
     
            t=NULL;
        }
        else
        {
     
            if(j==1)
            {
     
                t->lc=new BiTNode;
                t=t->lc;
                t->lc=NULL;
                t->rc=NULL;
                t->data=a[i];
            }
            else if(j==0)
            {
     
                t->rc=new BiTNode;
                t=t->rc;
                t->lc=NULL;
                t->rc=NULL;
                t->data=a[i];
            }
        }
        i++;
    }
}

你可能感兴趣的:(数据结构学习,二叉树,c语言,c++)