331. Verify Preorder Serialization of a Binary Tree【M】【16】【leetcode】
来源:互联网 发布:合肥气象数据 编辑:程序博客网 时间:2024/06/07 06:56
One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node's value. If it is a null node, we record using a sentinel value such as #
.
_9_ / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #
For example, the above binary tree can be serialized to the string "9,3,4,#,#,1,#,#,2,#,6,#,#"
, where #
represents a null node.
Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.
Each comma separated value in the string must be either an integer or a character '#'
representing null
pointer.
You may assume that the input format is always valid, for example it could never contain two consecutive commas such as "1,,3"
.
Example 1:"9,3,4,#,#,1,#,#,2,#,6,#,#"
Return true
Example 2:"1,#"
Return false
Example 3:"9,#,#,1"
Return false
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
class Solution(object): def isValidSerialization(self, preorder): #print input p = preorder if p == '#': return True if p[-1] != '#' or p[0] == '#': return False if p.count('#') > len(p) + 1: return False res = [] if p == None: return False count_of_num = 0 count_of_null = 0 tag = 0 for i in range(0,len(p)): if str.isdigit(str(p[i])): tag = 1 #continue elif p[i] == ',': if tag == 1: count_of_num += 1 tag = 0 else: count_of_null += 1 while count_of_null > 1: count_of_null -= 1 count_of_num -= 1 if count_of_null < 0 or (count_of_num < 1 and i < len(p)-1) : return False #if p[i] != ',': # print p[i],count_of_num,count_of_null if count_of_num == 0 and count_of_null==1: return True return False ''' t = 0 count = 0 tag = 0 for i in p: if i != ',': print i,res if str.isdigit(str(i)): t = t * 10 + int(i) tag = 1 continue if i == ',': if tag != 0: res.append(str(t)) count += 1 tag = 0 continue elif i == '#': res.append('#') while len(res) > 2 and res[-1] == '#' and res[-2] == '#': try: res.pop() res.pop() res.pop() res.append('#') count -= 1 print 'count',count if count < 0: return False except: return False #print res print res if res == ['#']: return True return False '''
- 331. Verify Preorder Serialization of a Binary Tree【M】【16】【leetcode】
- leetcode 331. Verify Preorder Serialization of a Binary Tree
- [LeetCode]331. Verify Preorder Serialization of a Binary Tree
- 【LeetCode】331. Verify Preorder Serialization of a Binary Tree
- LeetCode 331. Verify Preorder Serialization of a Binary Tree
- LeetCode *** 331. Verify Preorder Serialization of a Binary Tree
- LeetCode 331. Verify Preorder Serialization of a Binary Tree
- [leetcode] 331. Verify Preorder Serialization of a Binary Tree
- leetcode 331. Verify Preorder Serialization of a Binary Tree
- [leetcode] 331. Verify Preorder Serialization of a Binary Tree
- LeetCode 331. Verify Preorder Serialization of a Binary Tree
- [leetcode]331. Verify Preorder Serialization of a Binary Tree
- [LeetCode] 331. Verify Preorder Serialization of a Binary Tree
- leetcode 331. Verify Preorder Serialization of a Binary Tree
- leetcode Verify Preorder Serialization of a Binary Tree
- Leetcode: Verify Preorder Serialization of a Binary Tree
- LeetCode Verify Preorder Serialization of a Binary Tree
- [leetcode] Verify Preorder Serialization of a Binary Tree
- Java中的线程池
- JSON对象处理总结
- Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment
- 搭建jenkins+gradle自动化打android包
- JSONModel解析数据成Model
- 331. Verify Preorder Serialization of a Binary Tree【M】【16】【leetcode】
- HDU 4994Revenge of Nim(玄学)(Nim问题)
- 后序遍历 SDUT 数据结构实验之二叉树的建立与遍历
- 【Web API系列教程】1.1 — ASP.NET Web API入门
- **集团RAC 11g 虚拟机生产库环境
- POJ - 1442 Black Box
- 机器人操作系统(ROS)教程19:安装ARDUINO IDE使用rosserial
- C语言常用转义字符表 和 ASCII码表
- BZOJ 3713: [PA2014]Iloczyn|暴力