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
            
  • 相关阅读:
    系统运行性能监控日志
    iptables 操作
    访问dubbo没有权限,通过ip进行跳转服务器,并通过有权限服务器代理访问
    乐观锁
    ES的优化布局
    Docker壳的配置笔记
    expect 实现iterm2自动加载pem登录跳板机
    mybaits-spring demo 记
    Java中volatile修饰符,不稳定标记的用法笔记
    用intellj 建一个spring mvc 项目DEMO
  • 原文地址:https://www.cnblogs.com/seyjs/p/10634937.html
Copyright © 2011-2022 走看看