From jiuzhang
题目描述
给出一个字符序列,问该序列是否是一棵合法的二叉树的先序遍历?
找到一种不需要构造二叉树的方法。
For example:
“9,3,4,#,#,1,#,#,2,#,6,#,#”
是下面这颗二叉树的先序遍历。其中#代表空节点。
解题思路
一棵合法的二叉树去掉某个叶子节点后仍是合法的二叉树。在给出的字符序列中,叶子节点有很明显的特征,即叶子节点之后一定紧跟两个空节点#。通过不断的把number,#,#的子串缩成空节点#(把number,#,#子串替换为#),如果最后字符序列可以缩短到只有一个字符#,那它就是我们要找的合法的先序遍历了。
参考代码
1 | public class Solution { |
算法分析
此题可以用暴力搜索解决,但线性复杂度算法也不难想到。写出以上解法,可以达到hire, 而如果用stack解法,则可以 storng hire.
相关练习
树的操作时面试中的高频题目,基础操作(遍历,求深度,求path value等)需熟练掌握。
Verify Preorder Serialization of a Binary Tree
Binary Tree Preorder Traversal
Binary Tree Level Order Traversal
Binary Tree Level Order Traversal II
Binary Tree Postorder Traversal (思考非递归算法)