105. Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:项目开发计划软件 编辑:程序博客网 时间:2024/05/01 10:28

题目:

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

解题思路:

/** * 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) {        return buildTree_help(preorder,0,preorder.size()-1, inorder,0,inorder.size()-1);    }    TreeNode* buildTree_help(vector<int>& preorder,int start_pre,int end_pre, vector<int>& inorder,int start_in,int end_in){        if(start_pre>end_pre)return NULL;        TreeNode *root = new TreeNode(preorder[start_pre]);        int i = find(inorder.begin()+start_in,inorder.begin()+end_in,root->val) - inorder.begin()-start_in;        root->left = buildTree_help(preorder,start_pre+1,start_pre+i, inorder,start_in,start_in+i-1);        root->right = buildTree_help(preorder,start_pre+i+1,end_pre, inorder,start_in+i+1,end_in);        return root;    }};


0 0