LINTCODE——前序遍历和中序遍历树构造二叉树

来源:互联网 发布:jquery.loading.js 编辑:程序博客网 时间:2024/06/09 10:53

LINTCODE——前序遍历和中序遍历树构造二叉树

思路:
第一步:根据前序遍历可以得到树的根节点(root);
第二步:在中序遍历中找到(root)的所在位置,将中序数组划分成左右两个数组,对应左子树(left_tree)和右子树(right_tree);
第三步:同样的划分前序数组;
最后:递归结果就好了。。。。

class Solution {    /**     *@param preorder : A list of integers that preorder traversal of a tree     *@param inorder : A list of integers that inorder traversal of a tree     *@return : Root of a tree     */public:    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        // write your code here        if(preorder.empty())            return NULL;        if(preorder.size() == 1)            return new TreeNode(preorder[0]);        //找到中间点在中序排列的位置        int mid = 0;        for(int i = 0 ; i < inorder.size() ; i++)        {            if(inorder[i] == preorder[0])            {                mid = i;                break;            }        }         //拆分中序遍历        vector<int> left_inorder( inorder.begin() , inorder.begin()+mid);        vector<int> right_inorder(inorder.begin()+mid+1 , inorder.end());        int L = left_inorder.size() ;        //根据中序遍历的左边长度,拆分前序遍历;        vector<int> left_preorder(preorder.begin()+1 ,preorder.begin()+L+1);        vector<int> right_preorder(preorder.begin()+L+1 ,preorder.end());        //递归生产树        TreeNode *root = new TreeNode(inorder[mid]);        root -> left = buildTree(left_preorder , left_inorder);        root -> right = buildTree(right_preorder , right_inorder);        return root;    }};
阅读全文
0 0
原创粉丝点击