二叉树的有关操作

来源:互联网 发布:复杂网络的发展 编辑:程序博客网 时间:2024/05/24 06:03
struct BTreeNode{    char data;    BTreeNode *left;    BTreeNode *right;};//创建二叉树void createBTree(BTreeNode*&T){    char c;    cin>>c;    if(c=='#')    {        T= nullptr;    }else    {        T=new BTreeNode;        T->data=c;        createBTree(T->left);        createBTree(T->right);    }}//前序递归遍历void preTraverse(BTreeNode *T){    if(T)    {        cout<<T->data;        preTraverse(T->left);        preTraverse(T->right);    }}//中序递归遍历void midTraverse(BTreeNode *T){    if(T)    {        midTraverse(T->left);        cout<<T->data;        midTraverse(T->right);    }}//后续递归遍历void lastTraverse(BTreeNode *T){    if(T)    {        lastTraverse(T->left);        lastTraverse(T->right);        cout<<T->data;    }}//中序非递归遍历void midTrace(BTreeNode *T){    if(T== nullptr)return;    BTreeNode *p=T;    stack<BTreeNode*>s;    while(!s.empty()||p)    {        while(p)        {            s.push(p);            p=p->left;        }        if(!s.empty())        {            p=s.top();            cout<<setw(4)<<p->data;            s.pop();            p=p->right;        }    }}//前序非递归遍历void preTrace(BTreeNode *T){    if(T== nullptr)return;    BTreeNode *p=T;    stack<BTreeNode*>s;    while(!s.empty()||p)    {        while(p)        {            cout<<setw(4)<<p->data;            s.push(p);            p=p->left;        }        if(!s.empty())        {            p=s.top();            s.pop();            p=p->right;        }    }}//后续非递归遍历void lastTrace(BTreeNode *T){    if(T== nullptr)return;    stack<BTreeNode*>s;    BTreeNode *pCur=T;    BTreeNode *lastVisit;    while(pCur)    {        s.push(pCur);        pCur=pCur->left;    }    //此时p已经指左子树下边    while(!s.empty())    {        pCur=s.top();        s.pop();        if(pCur->right== nullptr||pCur->right==lastVisit)        {            cout<<setw(4)<<pCur->data;            lastVisit=pCur;        }else        {            s.push(pCur);            pCur=pCur->right;            while(pCur)            {                s.push(pCur);                pCur=pCur->left;            }        }    }}//层先遍历void layerTrace(BTreeNode *T){    if(T== nullptr)return;    BTreeNode *p=T;    queue<BTreeNode*>q;    q.push(p);    while(!q.empty())    {        p=q.front();        q.pop();        cout<<setw(4)<<p->data;        if(p->left!= nullptr)q.push(p->left);        if(p->right!= nullptr)q.push(p->right);    }}
原创粉丝点击