zoukankan      html  css  js  c++  java
  • leetcode刷题笔记331题 验证二叉树的前序序列化

    leetcode刷题笔记331题 验证二叉树的前序序列化

    源地址:331. 验证二叉树的前序序列化

    问题描述:

    序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。

    _9_
    

    /

    3 2
    / /
    4 1 # 6
    / / /

    #

    例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,6,#,#",其中 # 代表一个空节点。

    给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。

    每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 '#' 。

    你可以认为输入格式总是有效的,例如它永远不会包含两个连续的逗号,比如 "1,,3" 。

    示例 1:

    输入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
    输出: true
    示例 2:

    输入: "1,#"
    输出: false
    示例 3:

    输入: "9,#,#,1"
    输出: false

    object Solution {
        def isValidSerialization(preorder: String): Boolean = {
            var k = 0
            val s = preorder + ","
            if (dfs() == false) return false
    
            def dfs(): Boolean = {
                //遍历过程中 字符串已经消耗完
                if (k == s.length) return false
                //此分支遍历到底,遍历另一分支
                if (s(k) == '#') {
                    k += 2
                    return true
                }
                //访问到非叶子节点
                while (s(k) != ',') k += 1
                //越过逗号
                k += 1
    
                //检测左右子树是否满足
                return dfs() && dfs()
            }
    
            return k == s.length
        }
    }
    
    var k = 0
    var s string
    
    func isValidSerialization(preorder string) bool {
        k = 0
        s = preorder + ","
        if (dfs() == false) {return false}
        return k == len(s)
    }
    
    func dfs() bool {
        if k == len(s) {return false}
        if s[k] == '#' {
            k += 2
            return true
        }
        for (s[k] != ',') {
            k += 1
        }
        k += 1
        return dfs() && dfs()
    }
    
  • 相关阅读:
    js实现中文转拼音
    JS中的call、apply、bind方法
    python 过滤html方法
    css 多出一行或多行后显示...的方法
    js 中文排序
    eclipse小技巧
    npm安装及webpack打包小demo
    zan扩展安装
    vagrant安装centos7
    centos7 nginx访问目录403解决
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/14143729.html
Copyright © 2011-2022 走看看