LeetCode331。バイナリツリーの事前注文のシリアル化を確認します

難易度:中等
タイトルの説明:

二分木をシリアル化する1つの方法は、プレオーダートラバーサルを使用することです。空でないノードに遭遇した場合、このノードの値を記録できます。空のノードの場合は、
などのタグ値レコードを使用できます

ここに画像の説明を挿入します

たとえば、上記の二分木は文字列「9,3,4、#、#、1、#、#、2、#、6、#、#」にシリアル化できます。ここで、#は空のノードを表します。

カンマ区切りのシーケンスを指定して、それがバイナリツリーの正しいプレオーダーシリアル化であることを確認します。ツリーを再構築せずに実行可能なアルゴリズムを記述します。

コンマで区切られた各文字は、整数またはヌルポインターを表す「#」のいずれかです。

入力形式は常に有効であると考えることができます。たとえば、「1,3」のように2つの連続したコンマが含まれることはありません。

例1:

入力: "9,3,4、#、#、1、#、#、2、#、6、#、#"出力:true

例2:

入力:「1、#」出力:false

例3:

入力: "9、#、#、1"出力:false

ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree
著作権はLeetCodeが所有しています商用転載の場合は、公認機関にご連絡ください。非商用転載の場合は、出典を明記してください。

class Solution {
    
    
public:
    int n;
    bool isValidSerialization(string preorder) {
    
    
        n = preorder.size();
        int cnt = 0;
        int num = 0;
        for(int i=0; i<n; i++) {
    
    
            if(isdigit(preorder[i])) {
    
    
                num = 1;
            }
            else if(preorder[i] == ',') {
    
    
                cnt += num;
                if(cnt < 0 && i != n-1)
                    return false;
            }
            else if(preorder[i] == '#') {
    
    
                num = -1;
            }
        }
        return cnt+num == -1;
    }
};

おすすめ

転載: blog.csdn.net/chaokudeztt/article/details/114695936