我是靠谱客的博主 淡然萝莉,最近开发中收集的这篇文章主要介绍leetcode:331. 验证二叉树的前序序列化【栈顶消消乐 or 入度出度】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述

栈模拟分析

如果最后碰到’digit # #‘的情况可以把其代换成一个’#’
然后最后判断剩下的是否是一个’#'即可

这种就是经典的栈顶消消乐

栈ac code

class Solution:
    def isValidSerialization(self, preorder: str) -> bool:
        # 栈模拟
        # 'digit # #'合并成 # 即可
        pre_lst = preorder.split(',')
        st = []

        for item in pre_lst:
            st.append(item)
            while len(st) >= 3 and st[-1] == '#' and st[-2] == '#' and st[-3] != '#':
                st.pop(), st.pop(), st.pop()
                st.append('#')
        
        #print(st)
        return len(st) == 1 and st[0] == '#'

出度入度分析

跟的入度0出度2
非叶子入度1出度2
叶子入度1出度0

按照先序遍历 初始diff = 1
先diff减一 若其小于0就False了
因为最后要支撑diff == 0
然后如果是非叶子,diff += 2(出度加2)

就是遍历过程中不可能出现总入度 > 总出度的情况
有点难理解

出度入度ac code

class Solution:
    def isValidSerialization(self, preorder: str) -> bool:
        diff = 1
        pre_lst = preorder.split(',')

        for item in pre_lst:
            diff -= 1
            if diff < 0:
                return False
            if item != '#':
                diff += 2
        
        return diff == 0

总结

这道题应该栈模拟更容易理解和上手
通过栈顶消消乐来完成合法前序的判断即可

最后

以上就是淡然萝莉为你收集整理的leetcode:331. 验证二叉树的前序序列化【栈顶消消乐 or 入度出度】的全部内容,希望文章能够帮你解决leetcode:331. 验证二叉树的前序序列化【栈顶消消乐 or 入度出度】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部