使用BFS级别订单遍历验证BST的代码有什么问题

时间:2015-03-29 02:10:52

标签: javascript binary-tree binary-search-tree breadth-first-search

我一直试图让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;
};

0 个答案:

没有答案