二叉树 知道其他两种遍历方式求另一种

来源:互联网 发布:avmoo最新域名2016 8 编辑:程序博客网 时间:2024/05/22 02:20

已知先序和中序

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder){    int prel=preorder.size();    int in=inorder.size();    return suan(preorder,0,prel-1,inorder,0,in-1);}TreeNode* suan(vector<int>& preorder,int ps,int pe, vector<int>& inorder,int is,int ie){    if(ps==pe)        return new TreeNode(preorder[ps]);    if(is>ie||ps>pe)        return NULL;    TreeNode* root = new TreeNode(preorder[ps]);    int i=is;    while(i<=ie)    {        if(inorder[i]==preorder[ps])            break;        i++;    }    int len=i-is;    root->left=suan(preorder,ps+1,ps+len,inorder,is,is-1+len);    root->right=suan(preorder,ps+1+len,pe,inorder,is+len+1,ie);    return root;}};

已知后序和中序

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:   TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder){    int io=inorder.size();    int po=postorder.size();    return suan(inorder,0,io-1,postorder,0,po-1);}TreeNode* suan(vector<int>& inorder,int is,int ie, vector<int>& postorder,int ps,int pe){    if(is==ie)        return new TreeNode(inorder[is]);   else  if(is>ie)        return NULL;    TreeNode* root = new TreeNode(postorder[pe]);    int i=is;    while(i<=ie)    {        if(inorder[i]==postorder[pe])            break;        i++;    }    int len=i-is;    root->left=suan(inorder,is,is+len-1,postorder,ps,ps-1+len);    root->right=suan(inorder,is+1+len,ie,postorder,ps+len,pe-1);    return root;}};


0 0
原创粉丝点击