/**
* 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 {
private:
unordered_map<int, int> map;
private:
TreeNode* buildRecur(vector<int>& preorder, vector<int>& inorder, int preleft, int preright, int inleft, int inright ){
if(preleft > preright)return NULL;
// 前序的第一个节点是root;
int pre_root = preleft;
int in_root = map[preorder[pre_root]];
int left_length = in_root - inleft;
TreeNode* root = new TreeNode();
root->val = preorder[pre_root];
root->left = buildRecur(preorder, inorder, preleft + 1, preleft + left_length, inleft, in_root-1);
root->right = buildRecur(preorder, inorder, preleft + left_length + 1, preright, in_root + 1, inright);
// root->left = buildRecur(preorder, inorder, preleft + 1, preleft + left_length+1, inleft, in_root-1);
// root->right = buildRecur(preorder, inorder, preleft + left_length + 2, preright, in_root + 1, inright);
return root;
}
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int l = preorder.size();
TreeNode* res = new TreeNode();
// if( l == 0 )return res;
for( int i=0; i < l; i++ ) map[inorder[i]] = i;
res = buildRecur(preorder, inorder, 0, l - 1, 0, l - 1);
return res;
}
};
一开始提交出现的几个错误主要是
1:在递归左右子树时,边界没有搞i清楚
2:在buildtree里面定义结构体的时候,好像默认值为0,所以当传入的是空链表的时候,会返回0,是错误的结果
3:结构体在访问变量的时候是用 点 . 运算符还是 指针 ->运算符。