剑指offer--19.重建二叉树

先序:根》左》右
中序:左》根》右
后序:左》右》根
e.g.
{1,2,4,7,3,5,6,8}
{4,7,2,1,5,3,8,6}
先序第一个元素是根节点,在中序中找到后,中序左边的是左子树,右边是右子树
----------------------------------------------------------------------------------------------------
时间限制:1秒 空间限制:32768K 热度指数:571383

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
class Solution {
    public:
        struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
            if(in.size() == 0) return NULL;
            vector<int> pre_left,pre_right,in_left,in_right;
            int start = pre[0], pos;
            for( pos=0; pos<in.size(); pos++) {
                if(in[pos] == start) break;
            }
            for(int i=0; i<in.size(); i++) {
                if( i<pos) {
                    in_left.push_back(in[i]);
                    pre_left.push_back(pre[i+1]);
                } else if(i>pos) {
                    in_right.push_back(in[i]);
                    pre_right.push_back(pre[i]);
                }
            }
            TreeNode* node = new TreeNode(start);
            node->left = reConstructBinaryTree(pre_left, in_left);
            node->right = reConstructBinaryTree(pre_right, in_right);
            return node;
        }
};

 

posted @ 2019-03-28 17:52  朤尧  阅读(250)  评论(0编辑  收藏  举报