题目大意:根据给出的中序和后序遍历的序列构建二叉树
分析:dfs。与上一题105同理递归求解
代码:
/**
* 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>& inorder, vector<int>& postorder) {
return createBST(inorder,0,inorder.size() - 1,postorder,0,postorder.size() - 1);
}
TreeNode* createBST(vector<int>& inorder,int start1,int end1, vector<int>& postorder, int start2, int end2) {
if(start2 > end2)
return NULL;
int num = postorder[end2]; //在后序序列中找到根节点
int i = end1;
while (inorder[i] != num) i--; //在中序序列中找到根节点
TreeNode* root = new TreeNode(num);
int leftLen = i - start1;
root->left = createBST(inorder,start1,i - 1,postorder,start2,start2 + leftLen - 1);
root->right = createBST(inorder,i + 1,end1,postorder,start2 + leftLen,end2 - 1);
return root;
}
};