不信有人能找出错误?

本文介绍了一个C++程序,用于根据给定的二叉树前序和中序遍历构建后序遍历。然而,代码存在数组或指针越界问题。文章提供了修改后的代码片段以解决此问题。
摘要由CSDN通过智能技术生成
题目要求已知二叉树的前序中序,用代码实现后序?
代码如下,OJ检测说代码存在数组或指针越界?求更正
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
stack<char> stk;
void run(char *h_, char *t_, int i)
{
 
    if (i > ((string)h_).size() || ((string)t_).size() <= 1)
    {
        if (t_ !=nullptr)
            cout << t_;
        return;
    }
    string _h_="", _t_ = "";
    char *h_c = &_h_[0];
    char *t_c = &_t_[0];
    string format_ = (string) "%[^" + h_[i] + (string) "]" + h_[i] + (string) "%s";
    char *format = &format_[0]; // 制定定正则表达式
    if (sscanf(t_, format, h_c, t_c) == 0)
    {
        format = "%*c%s";
        sscanf(t_, format, h_c, t_c);
    }
    stk.push(h_[i]);
    run(h_, h_c,i + 1);
    run(h_, t_c, i + 1 + ((string)h_c).size());
    cout << stk.top();
    stk.pop();
}
 
int main()
{
    string s;
    while(getline(cin,s)){
        char* ss = &s[0];
        char* s1 = strtok(ss," ");
        char* s2 = strtok(NULL," ");
        if(((string)s1).size()!=((string)s2).size()){break;}
        run(s1, s2, 0);
        cout << endl;
    }
     
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值