您的位置:首页 > 职场人生

google面试题之不构造树的情况下验证先序遍历

2016-06-24 10:13 369 查看
题目如下所示:给出一个字符序列,问该序列是否是一棵合法的二叉树的先序遍历?

找到一种不需要构造二叉树的方法。

For example:

"9,3,4,#,#,1,#,#,2,#,6,#,#"

是下面这颗二叉树的先序遍历。其中#代表空节点。

代码一如下:(合法的二叉树中叶子节点后跟两个空节点(#),去掉叶子节点后的二叉树仍然为合法的二叉树,因此将叶子节点替换为空节点,判断最后剩下的节点是否为一个空节点)

var isValidSerialization = function(preorder) {
var a = preorder.split(",");
var len = a.length;
for(var i = 0; i<=a.length; i++){
if(i == a.length){
if(a.length < len){
i = 0;
len = a.length;
}else{
break;
}
}
if(a[i]!="#" && a[i+1] == "#" && a[i+2] == "#"){
a.splice(i,3,"#");
}
}
if(a.length == 1 && a[0] == "#"){
return true;
}else{
return false;
}
};

代码二如下:(合法二叉树中度为2的节点数等于叶子节点数加1)

var isValidSerialization = function(preorder) {
var nodes = preorder.split(',');
var i = 0, leaf = 1;
for(i = 0; i < nodes.length && leaf > 0; i++){
var node = nodes[i];
if(node !== '#'){
leaf++;
}else{
leaf--;
}
}
return leaf === 0 && i == nodes.length;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: