二叉树构造——前序和中序数组

原题在这里

  给两个数组表示前序和中序遍历结果,按此构造二叉树并返回根节点。

analyse:

  前序定根,中序分左右,铁板版的我写错了数组名字,瞎搞半小时浪费时间

code:

复制代码
class Solution
{
    vector<int> pre, mid;
    int x;
    int find(int l, int r)
    {
        while (l < r && pre[x] != mid[l])
            l++;
        return l;
    }
    TreeNode *mk(int l, int r) //当前pre根节点位置为x,那么在mid序列中,找x位置,左右即为子树
    {
        //构造当前子数区间为l,r
        if (x >= pre.size() || l > r)
            return nullptr;
        int y = find(l, r); //当前在mid[l,y-1]+[y+1,r]
        TreeNode *n = new TreeNode(pre[x++]);
        n->left = mk(l, y - 1);
        n->right = mk(y + 1, r);
        return n;
    }

public:
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder)
    {
        pre = preorder, mid = inorder;
        x = 0;
        //先序定根,中序分左右
        return mk(0, pre.size() - 1);
    }
};
复制代码

 

【Over】

posted @   Renhr  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示