标签:leetcode
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
postorder 为左 右 中,所以postorder的最后一个为根,取得树根后,在inorder中可以找到左子树与右子树的元素。
问题可分解为,找根,确定左子树与右子树的元素。所以,递归求解。
由于,postorder是从左至右存储根节点的,所以要先构造右子树。
/** * 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 postindex; TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { if(inorder.size()==0||postorder.size()==0) return NULL; postindex=postorder.size()-1; int stat=0; int end=postorder.size()-1; return foo(inorder,postorder,stat,end); } TreeNode* foo(vector<int> &inorder,vector<int> &postorder,int stat,int end){ if(stat>end) return NULL; TreeNode* root=new TreeNode(0); root->val=postorder[postindex]; postindex=postindex-1; int indexOfRoot=index(inorder,root->val); if(indexOfRoot==-1) exit(0); if(stat==end) return root; root->right=foo(inorder,postorder,indexOfRoot+1,end); root->left=foo(inorder,postorder,stat,indexOfRoot-1); return root; } int index(vector<int> v,int val){ int i; for(i=0;i<v.size();i++) if(v[i]==val) return i; return -1; } };
[leetcode] Construct binary tree from inorder and postorder traversal
标签:leetcode
原文地址:http://lichunyu.blog.51cto.com/8160154/1584340