题目描述
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:递归
该题与105题类似,与上题一样思想,换为中序与后序即可
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
|
class Solution { private: vector<int> inorders; vector<int> postorders; public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { this->inorders=inorder; this->postorders=postorder; int n=inorder.size(); if(n==0) return NULL; return find(0,n-1,0,n-1); } TreeNode *find(int pol,int por,int inl,int inr) { if(pol>por||inl>inr) return NULL; int l=0; int val=postorders[por]; while(inorders[l]!=val) l++; TreeNode *root=new TreeNode(val); root->left=find(pol,l-1-inl+pol,inl,l-1); root->right=find(por-inr+l,por-1,l+1,inr); return root; } };
|