Google 2016 面试题2 | 不构造树的情况下验证先序遍历
来源:互联网 发布:哪个走路软件可以赚钱 编辑:程序博客网 时间:2024/05/21 09:43
题目描述
给出一个字符序列,问该序列是否是一棵合法的二叉树的先序遍历?
找到一种不需要构造二叉树的方法。
For example:
“9,3,4,#,#,1,#,#,2,#,6,#,#”
是下面这颗二叉树的先序遍历。其中#代表空节点。
分析解答
通过观察上图中二叉树我们可以发现,一棵合法的二叉树去掉某个叶子节点后仍是合法的二叉树。在给出的字符序列中,叶子节点有很明显的特征,即叶子节点之后一定紧跟两个空节点#。通过不断的把number,#,#的子串缩成空节点#(把number,#,#子串替换为#),如果最后字符序列可以缩短到只有一个字符#,那它就是我们要找的合法的先序遍历了。
参考程序
class Solution {public: bool isValidSerialization(string preorder) { bool flag = true; while (preorder.length() > 1) { int index = preorder.find(",#,#"); if (index < 0) { flag = false; break; } int start = index; while (start > 0 && preorder[start-1] != ',') start--; if (preorder[start] == '#') { flag = false; break; } preorder.erase(start, index-start+3); } return flag && preorder[0] == '#'; }};
题目来源
LeetCode 331. Verify Preorder Serialization of a Binary Tree
1 0
- Google 2016 面试题2 | 不构造树的情况下验证先序遍历
- Google 2016 面试题2 | 不构造树的情况下验证先序遍历
- google面试题之不构造树的情况下验证先序遍历
- 面试题精选(76):给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- 简要验证先构造的对象后析构(某公司面试题---不考虑静态和全局对象)
- 面试题3:根据先序和中序遍历的结果构建二叉树
- 由二叉树中序遍历和先序遍历,构造二叉树,经过镜面翻转后输出层次遍历结果
- c++面试题:在不改变任何代码的情况下 输出hello world!
- 面试题二: java 实现二叉树的中序优先遍历,不能用递归
- 旧话重提,根据先序和中序遍历构造二叉树并后序遍历验证之
- JAVA二叉树,给出先序遍历和中序遍历,构造出新的二叉树
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- Tree Traversals Again(通过先序、中序遍历在不建树情况下推出后序遍历)
- 第十一周项目一 验证算法(2)二叉树构造算法的验证(先序和中序)
- 微软,Google面试题 (6) —— 判断整数序列是不是二元查找树的后序遍历结果
- java面试题--已知先序和中序遍历求后序遍历
- 树的先序遍历
- 欢迎使用CSDN-markdown编辑器
- 素数打表,复杂度(Onlogn)和O(n)(对与10^7来说线性快两倍) + 分解质因数
- 机器学习中的各种距离测量公式
- Quicksum
- 欢迎使用CSDN-markdown编辑器
- Google 2016 面试题2 | 不构造树的情况下验证先序遍历
- SpringBoot整合Quartz 2实现定时任务之一:整合
- HDU 5778(abs 暴力)
- 剑指offer54--二叉树的多行打印
- Gym 100971A Treasure Island
- MySQL information_schema说明
- 17-07-31 android 方法 如何引用链接获取json数据(改进版)
- Python——9函数式编程②
- request 生命周期及参数信息