105. Construct Binary Tree from Preorder and Inorder Traversal

这道题用指针,分治思想,相信看代码就能很容易弄懂了

这里有一个问题未解决(希望有人可以回答一下:
buildTree函数如果不加if语句在input为两个空vector对象的时候报错,搞不清楚为什么,因为我的build函数里是有对这个的判断的,两个空对象的时候进去p_l-p_r>0条件应该成立才对,也就是返回NULL,且我在本地环境运行无问题
错误为:Line 842: Char 45: runtime error: pointer index expression with base 0x000000000000 overflowed to 0xfffffffffffffffc (stl_iterator.h)

class Solution {
public:
    TreeNode* build(vector<int>::iterator p_l,vector<int>::iterator p_r,
        vector<int>::iterator i_l,vector<int>::iterator i_r){
        if(p_l-p_r>0)return NULL;
        TreeNode* current=new TreeNode(*p_l);
        auto k=find(i_l,i_r,current->val);
        int left_tree_n=k-i_l;
        current->left=build(p_l+1,p_l+left_tree_n,i_l,k-1);
        current->right=build(p_l+left_tree_n+1,p_r,k+1,i_r);
        return current;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.empty())return NULL;
        return build(preorder.begin(),preorder.end()-1,inorder.begin(),inorder.end()-1);
    } 
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值