zoukankan      html  css  js  c++  java
  • 2021.3.12刷题-验证二叉树的前序序列化

    题目链接:https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree
    题目描述:
    序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。

    例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。
    给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。
    每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#' 。
    你可以认为输入格式总是有效的,例如它永远不会包含两个连续的逗号,比如 "1,,3" 。

    示例 1:
    输入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
    输出: true

    示例 2:
    输入: "1,#"
    输出: false

    示例 3:
    输入: "9,#,#,1"
    输出: false

    题解:

    class Solution {
    public:
        bool isValidSerialization(string preorder) {
            int length = preorder.length();
            int i = 0;  //扫描指针
            int count = 1;  
            while(i < length)
            {
                if(count <= 0)  //处理除空树之外以"#"开始的序列
                    return false;
                //扫描位如果为“,”,跳过
                if(preorder[i] == ',')
                    i++;
                //扫描位如果为“#”,节点位减1,继续下一位扫描
                else if(preorder[i] == '#')
                {
                    count --;
                    i++;
                }
                //扫描位如果为“数字”,节点位-1+2
                else
                {
                    while(i < length && preorder[i] != ',') //处理多位数字
                    {
                        i++;
                    }
                    count = count - 1 + 2;
                    
                }
                //cout << count << endl;
            }
            return count == 0;
    
        }
    };
    
    
  • 相关阅读:
    hdu1087Super Jumping! Jumping! Jumping!(dp)
    划分树 hdu4417Super Mario
    poj2240Arbitrage(map+floyd)
    hdu4282A very hard mathematic problem
    hdu1421搬寝室(dp)
    【洛谷P3806】【模板】点分治1
    【CF914E】Palindromes in a Tree
    GDOI2020 游记
    【POJ2296】Map Labeler
    【洛谷P6623】树
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14522620.html
Copyright © 2011-2022 走看看