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

     _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

class Solution {
public:
    bool isValidSerialization(string preorder) {
        istringstream in(preorder);
        vector<string> v;
        string t = "";
        int cnt = 0;
        while (getline(in, t, ',')) v.push_back(t);
        for (int i = 0; i < v.size() - 1; ++i) {
            if (v[i] == "#") {
                if (cnt == 0) return false;
                --cnt;
            } else ++cnt;
        }
        return cnt == 0 && v.back() == "#";
    }
};

331.验证二叉树的前序序列化相关推荐

  1. leetcode 331. 验证二叉树的前序序列化

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

  2. leetcode 331. Verify Preorder Serialization of a Binary Tree | 331. 验证二叉树的前序序列化(栈解法)

    题目 https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/ 题解 看了答案,参考:拍案叫绝的两种解 ...

  3. LeetCode_Stack_331. Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化(Java)【栈,字符串处理】

    目录 一,题目描述 英文描述 中文描述 示例与说明 二,解题思路 1,栈合并节点 2,计算入度出度和 三,AC代码 Java 栈 计算出入度 四,解题过程 第一博 第二搏 一,题目描述 英文描述 On ...

  4. leetcode算法题--验证二叉树的前序序列化

    题目链接:https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/ 1.栈 bool isVal ...

  5. C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】

    题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...

  6. 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树

    算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树 最大二叉树 654. 最大二叉树 - 力扣(LeetCode) 给定一个不重复的整数数组 nums . 最大二叉 ...

  7. 二叉树的前序遍历,中序遍历,后序遍历-详解-配套例题

    二叉树作为数据结构中一种简单而且重要的数据结构,他的存储结构和算法都相对比较简单,因此他也显得特别重要,因为很多问题都可以抽象为二叉树的问题. 在这里我们对于二叉树的基本概念不做详细介绍,我们这里主要 ...

  8. 14 二叉树的前序遍历(Binary Tree Preorder Traversal)

    文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...

  9. 二叉树的前序,中序,后序的递归、迭代实现

    二叉树的前序遍历 递归实现 递归实现没什么好说的.个人感觉将函数功能看成一个整体,不要去想栈中怎么实现的.毕竟自己的脑袋不是电脑,绕着绕着就蒙了. void preordered_traversal_ ...

  10. LeetCode:144_Binary Tree Preorder Traversal | 二叉树的前序遍历 | Medium

    题目:Binary Tree Preorder Traversal 二叉树的前序遍历,同样使用栈来解,代码如下: 1 struct TreeNode { 2 int val; 3 TreeNode* ...

最新文章

  1. 异常与锁的释放(synchronized )
  2. 数学归纳法在数据结构与算法分析设计中的应用
  3. 蓝彗星(差分+前缀和)
  4. 谷歌招聘新职员的五大标准
  5. requests+正则表达式爬取豆瓣读书top250
  6. 小米手机怎么设置鸿蒙开机动画,小米9开机动画太酷炫了!还不知道怎么设置赶紧来看看!...
  7. 【学习笔记】贪心科技AI体验课
  8. 一天掌握DID模型,传统DID+多期DID+DID模型扩展PSM-DID+空间DID结合论文实现
  9. wx.login 和 wx.getUserProfile 同时使用问题
  10. MYSQL函数group_concat的使用
  11. 旷视科技 CVPR部分文章
  12. 前端常见问题以及处理方式 - - - (九) ES6中的set和map(map篇)
  13. 互联网、因特网、万维网、广域网、局域网、以太网的区别
  14. 数据治理服务解决方案
  15. 【肌电信号】脉搏信号分析(去噪+特征提取)matlab源码含GUI
  16. 给电视剧标注人脸的简单步骤:
  17. 挑战全网最全之django系列
  18. 路由组件的lazyLoad
  19. 【python】txt记事本转为excel表格,超快超方便
  20. 8/21 牛客补题+cf思维+tarjan

热门文章

  1. mybatis mysql begin end_sql中的begin....end
  2. aso优化时高权重的积分墙关键词_怎样做好积分墙关键词的优化
  3. 华为手机android是什么意思,华为手机里的文件夹表示什么意思?
  4. 如何把图片裁剪为圆形
  5. python车牌识别系统开源代码_python利用百度云接口实现车牌识别的示例
  6. 【计算机毕业设计】小型OA系统设计与实现Springboot
  7. 不 只{`pyr_PYR的完整形式是什么?
  8. 数据库锁 与 事务隔离级别
  9. html编辑器添加水印,怎么为UE编辑器上传的图片添加水印
  10. 互联网金融学习总结(1)——互联网金融(ITFIN)概念相关学习