笔试题:用二叉树构造双向链表

来源:互联网 发布:linux home目录不见了 编辑:程序博客网 时间:2024/06/08 15:12
#include <iostream>#include <string.h>using namespace std;struct Node{    Node *left;//相当于双向链表的prev指针。    Node *right;//相当于双向链表的next指针。    char data;    Node(char d = char()):data(d),left(NULL),right(NULL){}};class MTree{    public:    MTree():root(NULL){}    void Create_Tree(char *VLR,char *LVR)    {        int n = strlen(LVR);        Create_Tree(root,VLR,LVR,n);        }    void Create_Tree(Node *&t,char *VLR,char *LVR,int n)    {        //构造二叉树。        if(n==0)return ;        int i = 0;        while(VLR[0]!=LVR[i])i++;        t = new Node(VLR[0]);        Create_Tree(t->left,VLR+1,LVR,i);        Create_Tree(t->right,VLR+i+1,LVR+i+1,n-i-1);        }       void Create_DList(MTree &mt)    {        Node *pr = NULL;        Create_DList(root,pr,mt.root);    }    static void Printf(MTree &mt)    {//双向链表打印。       Node *p = mt.root;       while(p!=NULL)        {          cout<<p->data<<" ";          p=p->right;                }    }    private:    void Create_DList(Node *t,Node *&pr,Node *&mt)    {        //构造双向链表。      if(t==NULL)            {        return ;        }           Create_DList(t->left,pr,mt);        if(t!=NULL)         {        t->left=pr;        if(pr)        pr->right = t;        if(pr==NULL)mt=t;         }        if(pr!=NULL && pr->right==NULL)         {               pr->right=t;           t->left = pr;             }         pr = t;         Create_DList(t->right,pr,mt);    }    private:    Node *root;};int main(){    char VLR[]="ABCDEFG";    char LVR[]="CBDAFEG";    MTree mt;    mt.Create_Tree(VLR,LVR);    MTree mtlist;    mt.Create_DList(mtlist);    MTree :: Printf(mtlist);    return 0;}
1 0
原创粉丝点击