新二叉树

由于是先序遍历,所以在读入根节点和左右孩子结点后,可以直接在已经构造的序列里面查找,如果找到了,直接在这个根节点后插入左右孩子结点,如果没找到,就把根节点和左右孩子插到最后

#include<bits/stdc++.h>
using namespace std;

int main(){
    int t;
    cin>>t;
    char a,b,c; // a:root,b:left,c:right
    vector<char> s; 
    
    while(t--){
        cin>>a>>b>>c;
        // 找到root在当前序列中的位置
        auto it = find(s.begin(), s.end(), a);
        
        if(it != s.end()){  // root已在序列中,在其后插入左右孩子
            if(b!='*')
            it = s.insert(it + 1, b);  
            if(c!='*')
            s.insert(it + 1, c);      
        }
        else{ // root是新节点
            s.push_back(a);
            if(b!='*')
            s.push_back(b);
            if(c!='*')
            s.push_back(c);
        }
    }
    // 输出
    for(auto c : s){
        cout<<c;
    }
    return 0;
}

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
后测速成辅导一两个月...:写挺好的,建议尽早投简历,抢在hc多的时候开始面试
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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