重建二叉树

来源:互联网 发布:topsurv软件 编辑:程序博客网 时间:2024/06/05 15:39

给定两个序列,根据前序和中序构造二叉树:
例如前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {        TreeNode *root = reConstructFunc(pre,0,pre.size()-1,vin,0,vin.size()-1);        return root;    }    TreeNode *reConstructFunc(vector<int> pre,int pre_begin,int pre_len,vector<int> vin,int vin_begin,int vin_len)    {        if(pre_len<pre_begin||vin_len<vin_begin)              return NULL;        TreeNode* root = new TreeNode(pre[pre_begin]);        for(int i=vin_begin;i<=vin_len;++i)        {           if(pre[pre_begin]==vin[i])            {              root->left = reConstructFunc(pre,pre_begin+1,pre_begin+i-vin_begin,vin,vin_begin,i-1);              root->right = reConstructFunc(pre,i-vin_begin+1+pre_begin,pre_len,vin,i+1,vin_len);            }        }        return root;    }};
原创粉丝点击