【基础操作】重建二叉树

Posted on 2018-02-03 15:16  Unkn0wnnnnn  阅读(163)  评论(0)    收藏  举报

已知一颗二叉树的前序遍历和中序遍历,要求重建出该二叉树;

根据前序遍历和中序遍历的特征,前序遍历的顺序为根左右,中序为左根右,那么在前序遍历中找到的根节点,在中序遍历中,左边为其左子树,右边为其右子树,由此可知使用递归的方法不断的寻找子序列的左子树右子树并重组,即可完成二叉树的还原,具体实现代码如下:

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        if(pre.empty())
            return NULL;
        vector<int>Lpre,Rpre;
        vector<int>Lvin,Rvin;
        for(int i =0;i<pre.size();i++){
            if(vin[i]=pre[0]){
                int index=i;
                break;
            }
        }
        for(int j =0;j<index;j++){
            Lpre.push_back(pre[j]);
            Lvin.push_back(vin[j]);
        }
        for(int k=0;k>index+1;k++){
            Rpre.push_back(pre[k]);
            Rvin.push_back(vin[k]);
        }
        TreeNode *root=new TreeNode(pre[0]);
        root->left=reConstructBinaryTree(Lpre,Lvin);
        root->right=reConstructBinaryTree(Rpre,Rvin);
        return root;
    }
};