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;
        }
    }
};

 

posted on 2014-11-23 21:32  远近闻名的学渣  阅读(139)  评论(0)    收藏  举报

导航