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
原创粉丝点击