2021-03-12

今日Leetcode一题,是栈和树遍历相结合的一道题.
学到的技巧就是:使用stringstream和getline实现Split效果
题目链接:题目
getline ( istream &is , string &str , char delim )

参数一:istream &is 表示一个输入流,譬如cin,stringstream;

参数二:string &str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以)

参数三:char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入)
题解:

class Solution {
public:
    bool isValidSerialization(string preorder) {
        //验证序列化
        //思想就是栈顶有两个"#"的时候,连续弹出这两个"#"以及它们的共同父节点,然后将一个"#"入栈。也就是用空节点代替一棵子树

        //技巧:使用stringstream和getline 实现split效果
        vector<string> s;//当成栈使用
        stringstream ss;
        ss<<preorder;
        string temp;
        while(getline(ss,temp,',')){
            s.push_back(temp);
            while(s.size()>=3&&s[s.size()-1]=="#"&&s[s.size()-2]=="#"&&s[s.size()-3]!="#"){
                s.pop_back();
                s.pop_back();
                s.pop_back();
                s.push_back("#");
            }
        }
        return s.size()==1&&s[0]=="#";
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值