Swift算法:Verify Preorder Serialization of a Binary Tree

题目
class Solution {
    func isValidSerialization(preorder: String) -> Bool {
        if preorder == "" || preorder == "#,#" {
            return false
        }
        
        if preorder == "#" {
            return true
        }
        
        let array = preorder.componentsSeparatedByString(",")
        
        var stack: [String] = []
        
        for i in 0 ..< array.count {
            stack.append(array[i])
            while checkTop(stack) {
                for _ in 0 ..< 3 {
                    stack.popLast()
                }
                if stack.count == 0 {
                    if i == array.count-1 {
                        return true
                    } else {
                        return false
                    }
                }
                stack.append("#")
            }
        }
        return false
    }
    
    func checkTop(stack: [String]) -> Bool {
        let count = stack.count
        guard count > 1 else {
            return false
        }
        if stack[count-1] == "#" && stack[count-2] == "#" {
            return true
        } else {
            return false
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容