Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/** * 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, int inorderStart,int inorderEnd,vector<int>& postorder,int postorderStart,int postorderEnd) { if(inorderEnd-inorderStart==1){ return new TreeNode(inorder[inorderStart]); } if(inorderEnd-inorderStart==0){ return 0; } int val = postorder[postorderEnd-1]; int i=inorderStart; for(;i<inorderEnd;i++){ if(inorder[i] == val){ break; } } TreeNode *root = new TreeNode(val); int leftLen = i-inorderStart; int rightLen = inorderEnd - i - 1; root->left = buildTree(inorder,inorderStart,inorderStart+leftLen,postorder,postorderStart,postorderStart+leftLen); root->right = buildTree(inorder,inorderStart+1+leftLen,inorderEnd,postorder,postorderStart+leftLen,postorderEnd-1); return root; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int postorederSize = postorder.size(); int inorederSize = inorder.size(); if(postorederSize != inorederSize){ return NULL; } return buildTree(inorder,0,inorder.size(),postorder,0,postorder.size()); } };
写者:zengzy
出处: http://www.cnblogs.com/zengzy
标题有【转】字样的文章从别的地方转过来的,否则为个人学习笔记