我一直试图让OJ Leetcode上的测试用例通过使用级别顺序遍历来验证BST并且它没有通过。我通过73/74并且无法弄清楚原因。我非常感谢任何建议指出我正确的方向。
输入:{3,#,30,10,#,#,15,#,45}
输出:true
预期:错误
根据输入,也许我在这里错了,如果我是的话请纠正我,但我相信BST应该基于输入看起来如下:
3
/ \
N 30
/ \
10 N
/ \
N 15
/ \
N 45
这是我的代码:
var isValidBST = function(root) {
if (!root || !root.left && !root.right) {
return true;
}
var i = 0;
var j = -1;
var queue = {};
var isValid = true;
var recurse = function (node, side) {
if (!node) { return; }
if (node.left) {
queue[i++] = node.left;
if (node.val <= node.left.val) {
isValid = false;
}
}
if (node.right) {
queue[i++] = node.right;
if (node.val > node.right.val) {
isValid = false;
}
}
if (side === 'left') {
if (node.val >= root.val) {
isValid = false;
}
} else {
if (node.val <= root.val) {
isValid = false;
}
}
recurse(queue[++j], side);
};
recurse(root.left, 'left');
j = j > 0 ? i - 1 : -1;
recurse(root.right, 'right');
return isValid;
};