美文网首页
[剑指offer][04]重建二叉树

[剑指offer][04]重建二叉树

作者: FloatingIsland | 来源:发表于2018-06-07 15:17 被阅读0次
题目描述:

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

解题思路:

根据前序的第一个数字pre[0]是根的特性,再在中序中找到pre[0]在中序中的索引idx,分开,左边的是左子树,右边的是右子树。然后递归求出结果。

代码实现
思路1:
/**
 * 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<int> pre,vector<int> vin) {
        //递归终止条件
        if(!pre.size()){
            return nullptr;
        }
        
        vector<int> lef_pre,lef_vin;
        vector<int> rig_pre,rig_vin;
        TreeNode *head=new TreeNode(pre[0]);
        //找到根节点
        size_t idx=-1;
        for(size_t i=0;i<vin.size();i++)
        {
            if(vin[i]==pre[0]){
                idx=i;
                break;
            }    
        } 
        if(idx == -1){
            return nullptr;
        }
        //树的根节点
        head->val = vin[idx];
        //左子树的前序中序       
        for(size_t i=0;i<idx;i++){
            lef_pre.push_back(pre.at(i+1));
            lef_vin.push_back(vin.at(i));
        }
        //右子树的前序中序
        for(size_t i=idx+1;i<pre.size();i++){
            rig_pre.push_back(pre.at(i));
            rig_vin.push_back(vin.at(i));
        }
        //递归重建树的左右子树 
        head->left=reConstructBinaryTree(lef_pre,lef_vin);
        head->right=reConstructBinaryTree(rig_pre,rig_vin);
        return head;
    }
};
参考链接

剑指Offer——重建二叉树——C++

相关文章

  • LeetCode | 面试题07. 重建二叉树【剑指Offer】

    LeetCode 面试题07. 重建二叉树【剑指Offer】【Medium】【Python】【二叉树】【递归】 问...

  • 71.重建二叉树

    day18: 剑指 Offer 07. 重建二叉树[https://leetcode-cn.com/prob...

  • 剑指Offer 07. 重建二叉树

    剑指 Offer 07. 重建二叉树 题目传送门[https://leetcode-cn.com/problems...

  • 剑指Offer--(5)重建二叉树

    title: 剑指Offer--(5)重建二叉树 categories: 算法与数据结构 tags: 数据结构 题...

  • 剑指Offer(四)

    剑指Offer(四) 重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的...

  • 重建二叉树

    《剑指offer》面试题7:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前...

  • 重建二叉树

    上牛客网做了一道剑指offer的算法题 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设...

  • [剑指offer][04]重建二叉树

    题目描述: · 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不...

  • 剑指offer:04 重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复...

  • 剑指offer第二版-7.重建二叉树

    本系列导航:剑指offer(第二版)java实现导航帖 面试题7:重建二叉树 题目要求:根据二叉树的前序遍历和中序...

网友评论

      本文标题:[剑指offer][04]重建二叉树

      本文链接:https://www.haomeiwen.com/subject/atygsftx.html