题解 | #二叉树遍历#

二叉树遍历

https://www.nowcoder.com/practice/6e732a9632bc4d12b442469aed7fe9ce

#include <iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
typedef struct Binode {
    char data;
    struct Binode* lnode;
    struct Binode* rnode;
    Binode(char c): data(c), lnode(NULL), rnode{NULL} {}
};
Binode* midVisit(string prestr, string midstr) {

    if (prestr.size() == 0) return NULL;
    char root = prestr[0];
//    cout<<"\n当前根节点为:"<<root;

    Binode* b = new Binode(root);
    int position = midstr.find(root);
    b->lnode = midVisit(prestr.substr(1, position), midstr.substr(0, position));
    b->rnode = midVisit(prestr.substr(position + 1),
                        midstr.substr(position +
                                      1)); //敲成midstr.substr(position)会闪退,因为substr找不到对应的position
//                string mid1="                            ";
//                string mid2="                            ";
//                for(int j=0;j<i;j++){
//                   if(midstr[j]==NULL||midstr[j]==' ') break;
//                     mid1[j]=midstr[j];
//
//                }
//                cout<<"\n左字符串为"<<mid1;
//                b->lnode= midVisit(prestr,mid1,pos);
//                for(int k=i+1,m=0;k<midstr.size();k++,m++){
//                    if(midstr[k]==NULL||midstr[k]==' ') break;
//
//                    mid2[m]=midstr[k];
//                }
//                 cout<<"\n右字符串为"<<mid2;
//                   b->rnode= midVisit(prestr,mid2,pos);
    return b;
}

//后续遍历
void lastVist(Binode* b) {
    if (b == NULL) return;
    lastVist(b->lnode);
    lastVist(b->rnode);
    cout << b->data;
}
int main() {
    string strpre, strmid;
    while (cin >> strpre >> strmid) {
        //遍历前序,找根
        Binode* res = midVisit(strpre, strmid);
        lastVist(res);
//        string strtest="kkkkk";
//        int testpos=strtest.find('a');
//        string strtestres=strtest.substr(testpos);//闪退
    }
    return 0;
}

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
10-25 22:20
门头沟学院 Java
代码飞升_不回私信人...:同学院本,个人亮点去了,打招呼里面的废话也去了,学院本就是路边一条,明天拉满然后该学还是学,小厂也行尽量先有一段实习。另外你的项目描述写的不好,具体列一下可被提问的点,然后量化一下指标或者收益吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务