leetcode 之 Verify Preorder Serialization of a Binary Tree

题目描述:

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

即 给定一颗二叉树的前序遍历串,判断这个串是不是合法的。

分析:1. 前序遍历的即为 根左右遍历,首先访问根节点,然后依次左子树和右子树。

   2. 对于9,3,4,#,#,1,#,#,2,#,6,#,# 这个串来说,6, #,# 一定是一个叶子节点,将其移除后,替换为"#"

   3. 这时串变为: 9,3,4,#,#,1,#,#,2,#,#,继续第二步操作

使用堆栈保存输入的串,当堆栈后三个元素为 x## 时, 移除这三个元素,并加入#, 最后如果堆栈长度为1 且 值为# ,则返回true

代码如下:

 1 class Solution(object):
 2     def isValidSerialization(self, preorder):
 3         """
 4         :type preorder: str
 5         :rtype: bool
 6         """
 7         l = len(preorder)
 8         if l == 1 and preorder[0] == "#":
 9             return True
10         if preorder[0] == "#":
11             return False
12         ls = preorder.split(",")
13         stack = []
14         for i in ls:
15             stack.append(i)
16             while len(stack) >= 3 and stack[-2] == "#" and stack[-1] == "#" and stack[-3] != "#":
17                 stack.pop()
18                 stack.pop()
19                 stack.pop()
20                 stack.append("#")
21                 
22         return len(stack) == 1 and stack[0] == "#"
~~~~~
原文地址:https://www.cnblogs.com/missmzt/p/5564355.html