zoukankan      html  css  js  c++  java
  • 【leetcode】331. 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:

    Input: "9,3,4,#,#,1,#,#,2,#,6,#,#"
    Output: true

    Example 2:

    Input: "1,#"
    Output: false
    

    Example 3:

    Input: "9,#,#,1"
    Output: false

    解题思路:我的方法是模拟树的遍历,依次pop出preorder中的节点存入queue中,用direction记录遍历的方向。direction=1表示往左子树方向的,等于2表示往右子树方向,遇到#号则变换一次方向。如果preorder的顺序是合法的,那么最后的结果一定是preorder和queue里面都是空。

    代码如下:

    class Solution(object):
        def isValidSerialization(self, preorder):
            """
            :type preorder: str
            :rtype: bool
            """
            if preorder == '#':
                return True
            elif preorder[0] == '#':
                return False
            preorder = preorder.split(',')
            direction = 1
            queue = [int(preorder.pop(0))]
            while len(queue) > 0 and len(preorder) > 0:
                item = preorder.pop(0)
                if item == '#':
                    direction += 1
                    if direction % 3 == 0:
                        direction -= 1
                        queue.pop(-1)
                    continue
                queue.append(item)
            return len(preorder) == 0 and len(queue) == 0
            
  • 相关阅读:
    判断输入的字符串是否含有特殊字符和表情
    表单转换为JSON
    重写Alert和confirm方法去除地址显示
    C语言内存管理
    自定义C语言中常用的字符串操作函数
    C语言中定义字符串的几种方式
    WebStorm常用快捷键
    鼠标点击特效
    打印指定年份的日历
    VS code 生成.exe可执行文件失效问题
  • 原文地址:https://www.cnblogs.com/seyjs/p/10634937.html
Copyright © 2011-2022 走看看