根据前序后序构造二叉树

#include 
#include 
using namespace std;

struct Node
{
    char data;
    Node *left;
    Node *right;
    Node(char d = char()):data(d),left(NULL),right(NULL) {}
};

class myTree
{
private:
    void prePrintf(Node *p)
    {
        if(p!=NULL)
        {
            cout<data<<"\t";
            prePrintf(p->left);
            prePrintf(p->right);
        }
    }
    void Init(Node *&p,const char *&s1,const char *s2,int n)
    {
        //根据二叉树的前序跟后续构造二叉树.
        int i = 0;
        if(*s1=='\0') return;
        for(; i<=n; i++)
        {
            if(*s1==s2[i])
            {
                break;
            }
        }
        if(i>n)  return;
        p = new Node(*s1);
        Init(p->left,++s1,s2,i-1);
        Init(p->right,s1,s2+i+1,n-i);
    }
    Node *root;
public:
    myTree()
    {
        root = NULL;
    }
    void Init(const char *s1,const char *s2)
    {
        int n = strlen(s1);
        Init(root,s1,s2,n);
    }
    void Printf()
    {
        prePrintf(root);
    }
};
int main()
{
    myTree  mt;
    char *s1 = new char[7];
    char *s2 = new char[7];
    strcpy(s1,"ABCDEFG");
    strcpy(s2,"CBDAFEG");
    mt.Init(s1,s2);
    mt.Printf();
    return 0;
}

你可能感兴趣的:(根据前序后序构造二叉树)