重建二叉树

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* bulid(vector<int>& preorder,int l1,int r1,vector<int>& inorder,int l2,int r2)
    {
        if(l1>r1)   return NULL;
        int root=preorder[l1];
        int idx=-1;
        for (int i = l2; i <= r2; i ++ )
            if(inorder[i]==root)
            {
                idx=i;
                break;
            }
        TreeNode* t=new TreeNode(root);
        int len=idx-l2;//左子树长度
        t->left=bulid(preorder,l1+1,l1+len,inorder,l2,idx-1);
        t->right=bulid(preorder,l1+len+1,r1,inorder,idx+1,r2);
        return t;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        TreeNode* root=bulid(preorder,0,preorder.size()-1,inorder,0,preorder.size()-1);
        return root;
    }
};

posted @   穿过雾的阴霾  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示