美文网首页
04:重建二叉树

04:重建二叉树

作者: iwtbam | 来源:发表于2019-07-30 16:27 被阅读0次

    题目描述

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

    解题思路

    • 根据前序和中序的特点, 前序的第一个元素,这个树的根节点,在中序中找到这个元素,这个数左边的所有节点,是这个节点的左子树节点,这个数右边的节点是,这个节点的右子树节点。按照这个规律递归构建整个数。

    AC代码

    class Solution {
    public:  
        TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
            if(pre.size() == 0)
                return nullptr;
            
            int head = pre.at(0);
            TreeNode * node = new TreeNode(head);
            
            auto iter = find(vin.begin(), vin.end(), head);
            auto dis = iter - vin.begin();
            
            node->left = reConstructBinaryTree(vector<int>(pre.begin() + 1, pre.begin() + 1 + dis),
                                               vector<int>(vin.begin(), iter));
                                              
            node->right= reConstructBinaryTree(vector<int>(pre.begin() + 1 + dis, pre.end()),
                                               vector<int>(iter + 1 , vin.end()));
                                              
            return node;
        }
    };
    
    

    相关文章

      网友评论

          本文标题:04:重建二叉树

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