LeetCode-Construct Binary Tree from Inorder and Postorder Traversal-中序后序重构二叉树-递归
https://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-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: int n; vector<int> in; vector<int> po; TreeNode *Solve(int l1,int r1,int l2,int r2){ if(l1==r1 || l2==r2) return NULL; int val=po[r2-1]; TreeNode *cur=new TreeNode(val); int p=find(in.begin(),in.end(),val)-in.begin(); cur->left=Solve(l1,p,l2,l2+p-l1); cur->right=Solve(p+1,r1,l2+p-l1,r2-1); return cur; } TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { in=inorder; po=postorder; n=in.size(); return Solve(0,n,0,n); } };