leetcode : 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.
使用分治算法可以很好的解决,注意数组越界的分析。
表示不会用Xcode调试,智商感了个人
AC 代码:
class Solution { public: TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { if(inorder.size() == 0) return NULL; int len = inorder.size(); return getRoot(inorder, 0, len - 1, postorder, 0, len - 1); } TreeNode *getRoot(vector<int> &inorder, int si, int ei, vector<int> &postorder, int sp, int ep){ if(si > ei || sp > ep){ return NULL; }else if(si == ei){ auto root = new TreeNode(inorder[si]); return root; }else{ int rootval = postorder[ep]; int root = si; while(inorder[root] != rootval){ ++root; } auto node = new TreeNode(rootval); node->left = getRoot(inorder, si, root - 1, postorder, sp, sp + root - si - 1); node->right = getRoot(inorder, root + 1, ei, postorder, sp + root -si, ep - 1); return node; } } };
浙公网安备 33010602011771号