剑指offer4:根据前序序列和中序序列重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回

思路:利用递归的方法,将利用根节点将前序遍历和中序遍历的左子树和右子树分别放入vector中递归即可。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* reConstructBinaryTree(vector pre,vector vin) {
        //终止条件:向量为空,然后返回NULL即可
        if(pre.empty()||vin.empty())
            return NULL;
        int mid = pre[0];//这是根节点的值
        TreeNode* p = new TreeNode(mid);
        vector left_pre;//左子树前序序列
        vector left_vin;//左子树中序序列
        vector right_pre;//右子树前序序列
        vector right_vin;//右子树中序序列
        bool flag = 0;//设置一个标志位,用于考察中序序列是否到遇到根节点
        //下面这个for循环得到中序序列的左子树和右子树
        for(int i = 0;ileft = reConstructBinaryTree(left_pre,left_vin);
        p->right = reConstructBinaryTree(right_pre,right_vin);
        return p;
    }
};

 

你可能感兴趣的:(剑指)