1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
/** * 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 buildSubTree(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1); } TreeNode* buildSubTree(vector<int> &preorder, vector<int> &inorder, int pre_left, int pre_right, int in_left, int in_right) { if(pre_left > pre_right || in_left > in_right) return NULL; else if(pre_left == pre_right || in_left == in_right) { TreeNode *new_node = new TreeNode(preorder[pre_left]); return new_node; } else { TreeNode *new_node = new TreeNode(preorder[pre_left]); int i = in_left; for(; i <= in_right; i++) { if(inorder[i] == preorder[pre_left]) break; } int new_node_position_in_order = i; int left_length = new_node_position_in_order-in_left; new_node->left = buildSubTree(preorder, inorder, pre_left+1, pre_left+left_length, in_left, new_node_position_in_order-1); new_node->right = buildSubTree(preorder, inorder, pre_left+left_length+1, pre_right, new_node_position_in_order+1,in_right); return new_node; } } };
|
近期评论