算法描述:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7] inorder = [9,3,15,20,7]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
解题思路:理解原理。
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return helper(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1); } TreeNode* helper(vector<int>& preorder, int ps, int pe, vector<int>& inorder, int is, int ie){ if(ps > pe || is > ie) return nullptr; TreeNode* node = new TreeNode(preorder[ps]); int pos = 0; for(int i=is; i <= ie; i++){ if(inorder[i]==preorder[ps]){ pos = i; break; } } node->left = helper(preorder, ps+1, pe, inorder, is, pos-1); node->right = helper(preorder,ps+pos-is+1, pe, inorder, pos+1, ie); return node; }