LeetCode331:验证二叉树的前序序列化
0x00.题目链接:
https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/
0x01.解题思路:
借鉴官方解答的思路,引入“槽位”的概念。所谓“槽位”,即为该序列中仍可出现的‘#’的个数。每当遍历至数字,槽位+1(因为数字由左右子节点,可+2槽位,同时其本身消耗1槽位);遍历至‘#’,槽位-1。因此,可定义一个整型变量vol记录当前槽位数,其初始值为1。
该序列为二叉树前序序列的充要条件为:槽位在遍历字符串的过程中一直保持大于零,且在遍历结束后恰等于零。
0x02.代码
class Solution { public: bool isValidSerialization(string preorder) { int vol=1,n=preorder.size(),i=0; while(i<n){ if(vol==0) return false; if(preorder[i]=='#') vol--; else if(preorder[i]>='0'&&preorder[i]<='9'){ while(preorder[i]>='0'&&preorder[i]<='9') i++; i--; vol++; } i++; } return vol==0; } };
0x03.总结
本题在官方解答的基础上,摒弃了栈,简化了程序结构。
不过,该算法的时间复杂度和空间复杂度没有改变,均为O(1)。
相关知识联想:二叉树的前序遍历、中序遍历、后序遍历。

浙公网安备 33010602011771号