剑指offer-重建二叉树

题目描述 重建二叉树

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

解题思路

1.先求出第一个根节点,前序序列第一个元素。
2.在中序遍历中中寻找根节点
3.递归调用构建当前节点的左子树
4.递归调用构建当前节点的右子树

代码

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin, int preStart, int preEnd, int vinStart, int vinEnd) {
        if(preStart>preEnd || vinStart>vinEnd) return nullptr;
        TreeNode *res = new TreeNode(pre[preStart]);

        int x;
        for(int i=0;i<=vinEnd;i++){
            if(vin[i]==pre[preStart]){
                x = i;
                break;
            }
        }

        res->left = reConstructBinaryTree(pre, vin, preStart+1, x-vinStart+preStart, vinStart,x-1);
        res->right = reConstructBinaryTree(pre, vin, x-vinStart+preStart+1, preEnd, x+1, vinEnd);
        return res;
    }

    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        return reConstructBinaryTree(pre, vin, 0, pre.size()-1, 0, vin.size()-1);
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 现在是10.26的早晨5:25分,我已经醒来快三个半小时了。毫无睡意。闭上眼睛,感觉过去快一个小时了,睁开眼睛,不...
    圈圈o0阅读 247评论 5 1
  • 20180202三件好事 ①晒洗了被子,晚上的被窝都是阳光的味道 ②西西去幼儿园了,虽然他不想,但是他愿意坚持。 ...
    秀琴sukin阅读 193评论 0 1
  • 规培的第三年,已经把我从最初的激情慢慢的消磨掉了,剩下的就只有更多的迷茫和对人生的疑惑。 1.不少人问我,你咋选急...
    脱兔酱阅读 281评论 0 0
  • 尝试画画二十天,此时想分享上来,画出此画时,我感觉和原画感觉完全不一样的风格,我的内敛含蓄有点小羞涩,感觉放不开内...
    Ali阿厘阅读 273评论 0 0

友情链接更多精彩内容