2025年--Lc181--H331. 验证二叉树的前序序列化(二叉树,计数器)--Java版
1.题目
2.思路
计数法
(1)如果遇到数字,那么消耗1个槽位,增加两个槽位。净利润1个槽位。并且右移一位
(2)如果遇到逗号,直接右移1位
(3)如果遇到#,说明是空节点,空节点消耗1个槽位。净利润是-1个槽位。并且右移一位
最后槽位都用完,说明节点都有位置存放,成功构造了二叉树。
3.代码实现
class Solution {public boolean isValidSerialization(String preorder) {int n=preorder.length();int i=0;//初始化槽位是1,用来存放根节点int slots=1;while(i<n){//如果槽位为空,说明一开始就放不了节点if(slots==0){return false;}if(preorder.charAt(i)==','){//如果遇到,号直接移动到下一位i++;}else if(preorder.charAt(i)=='#'){//空节点消耗一个槽位slots--;//消耗完1个槽位了,然后移动到下一位i++;}else{//如果读到1个数字,指针当前还是小于字符串的长度并且遇到逗号,我们下移一位是数字while(i<n&&preorder.charAt(i)!=','){i++;}//数字节点本身自己消耗1个槽位,并且他的孩子节点要增加2个槽位slots=slots-1+2;}}//如果最后槽位用完,说明,可以构造1个二叉树return slots==0;}
}