Leetcode::Construct Binary Tree from Preorder and Inorder Traversal
递归实现
/** * 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 *build( vector<int>&preorder,vector<int> &inorder,int start,int end,int start1,int end1) { if(start==end) return NULL; int i; TreeNode * tmp = new TreeNode(preorder[start]); for(i=start1; i<end1; i++) { if( inorder[i]==preorder[start]) break; } int len = i - start1; TreeNode *left=build(preorder,inorder,start+1,start+1+len,start1,i); TreeNode *right=build(preorder,inorder,start+1+len,end,i+1,end1); tmp->left=left; tmp->right=right; return tmp; } TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { // Start typing your C/C++ solution below // DO NOT write int main() function return build(preorder,inorder,0,preorder.size(),0,inorder.size()); } };