Google 2016 面试题2 | 不构造树的情况下验证先序遍历

211 阅读2分钟

专栏 | 九章算法
网址 | www.jiuzhang.com

题目描述

给出一个字符序列,问该序列是否是一棵合法的二叉树的先序遍历?
找到一种不需要构造二叉树的方法。

For example:

"9,3,4,#,#,1,#,#,2,#,6,#,#"
是下面这颗二叉树的先序遍历。其中#代表空节点。

分析解答

通过观察上图中二叉树我们可以发现,一棵合法的二叉树去掉某个叶子节点后仍是合法的二叉树。在给出的字符序列中,叶子节点有很明显的特征,即叶子节点之后一定紧跟两个空节点#。通过不断的把number,#,#的子串缩成空节点#(把number,#,#子串替换为#),如果最后字符序列可以缩短到只有一个字符#,那它就是我们要找的合法的先序遍历了。

参考程序

面试官角度分析

此题可以用暴力搜索解决,但线性复杂度算法也不难想到。笔者认为正确的搜索算法可以达到hire,线性复杂度的算法可以达到strong hire。

相关练习题推荐

Binary Tree Preorder Traversal

Binary Tree Level Order Traversal

Binary Tree Postorder Traversal

推荐阅读



欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

九章算法,IT教育领域的深耕者
九章算法,IT教育领域的深耕者