class Solution {
public:
TreeNode *createTree(vector<int> &inorder,int InBegin,int InEnd, vector<int> &postorder,int PostBegin,int PostEnd){
if( InBegin > InEnd )
return NULL;
int root = postorder[PostEnd];
int index = 0;
for( int i = InBegin;i <= InEnd; i++ ){
if( inorder[i] == root ){
index = i;
break;
}
}
int len = index-InBegin;
// 一定要控制好边界值
TreeNode *left = createTree(inorder,InBegin,index-1,postorder,PostBegin,PostBegin+len-1);
TreeNode *right = createTree(inorder,index+1,InEnd,postorder,PostBegin+len,PostEnd-1);
TreeNode *Node = new TreeNode(root);
Node->left = left;
Node->right = right;
return Node;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
if( inorder.size() == 0 && postorder.size() == 0 )
return NULL;
return createTree(inorder,0,inorder.size()-1,postorder,0,postorder.size()-1);
}
};
【leetcode】Construct Binary Tree from Inorder and Postorder Traversal----C++实现
最新推荐文章于 2018-08-27 09:15:36 发布