leetcode【DFS】-----105. Construct Binary Tree from Preorder and Inorder Traversal【构造二叉树】

1、题目描述

    

2、分析

        从前序和中序中构造二叉树,构造二叉树最关键的是找到根节点,这个题和用后序和中序构造二叉树的思路上是一样的,首先找到根节点,然后将数组再分为两部分,递归的构造左右子树。

3、代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0||inorder.size()==0) return NULL;
        vector<int> preleft,preright,midleft,midright;
        int target=0;
        TreeNode* Head=new TreeNode(preorder[0]);
        for(int i=0;i<inorder.size();++i){
            if(inorder[i]==preorder[0]){
                target=i;
                break;
            }
        }
        //重建左子树数组
        for(int i=0;i<target;++i){
            preleft.push_back(preorder[i+1]);
            midleft.push_back(inorder[i]);
        }
        //重建右子树数组
        for(int i=target+1;i<preorder.size();++i){
             preright.push_back(preorder[i]);
             midright.push_back(inorder[i]);
        }
        Head->left=buildTree(preleft,midleft);
        Head->right=buildTree(preright,midright);
        return Head;
        
    }
};

4、相关知识点

        构造树的递归。

posted @ 2019-07-09 20:36  吾之求索  阅读(87)  评论(0)    收藏  举报