面试题07-重建二叉树

209 阅读1分钟

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

题解

要想通过先序和中序求二叉树,设当前先序序列区间为[preL,preR].中序序列区间为[inL,inR];

TreeNode* create(vector<int>& pre, vector<int>& in,int preL,int preR,int inL,int inR){
        if(preL>preR)
            return NULL;
        TreeNode* root=(TreeNode*)malloc(sizeof(TreeNode));
        root->val=pre[preL];#根节点的值等于先序序列第一个值;
        int k;#k为根节点在中序序列中的位置
        for(k=inL;k<=inR;k++){
            if(in[k]==pre[preL])
                break;
        }
        int numleft=k-inL;#numleft为左子树的节点个数
        root->left=create(pre,in,preL+1,preL+numleft,inL,k-1);
        root->right=create(pre,in,preL+numleft+1,preR,k+1,inR);
        return root;
    }

题目源地址[leetcode-cn.com/problems/zh…]