在我的Javascript类的测验中,我们被告知要创建一个简单的树并编写一个返回true或false的函数,无论它是否为BST。
我得到了不错的分数,但我得到了10分,因为教练说“这可以用6行来完成。”
这就是我所拥有的:
function node(value, left, right){
this.Value = value;
this.Left = left;
this.Right = right;
}
//this IS a BST, returns true
var head = new node(8, new node(9, null, null), new node(10, new node(9, null, null), new node(14, new node(13, null, null), null)));
function isBST(currNode){
if(currNode.Left === null && currNode.Right === null){
return true;
}
else if(currNode.Left.Value > currNode.Value || currNode.Right.Value < currNode.Value){
return false;
}
else{
if(currNode.Left === null){
return isBST(currNode.Right);
}
else if(currNode.Right === null){
return isBST(currNode.Left);
}
else{
return (isBST(currNode.Left) && isBST(currNode.Right));
}
}
}
console.log(isBST(head));
我在这里俯瞰的一切?也许它不应该是递归的?
答案 0 :(得分:3)
您当前功能的问题在于它不起作用。它返回true:
4
/ \
3 5
/ \
2 100
此时所有其他答案似乎都有同样的问题。这是一个有效且短得多的
function isBST(curNode, minval, maxval){
if (curNode == null) {
return true;
}
return (
(minval == null || minval <= curNode.Value) &&
(maxval == null || maxval >= curNode.Value) &&
isBST(curNode.Left, minval, curNode.Value) &&
isBST(curNode.Right, curNode.Value, maxval)
);
}
答案 1 :(得分:1)
如果你的老师都担心的是行数......我会认为他们是一个坏老师......
话虽如此......我并不是说你的代码是正确的,但这里是你的代码减去无关的返回语句,行数少于6行。
function node(value, left, right){
this.Value = value;
this.Left = left;
this.Right = right;
}
//this IS a BST, returns true
var head = new node(8, new node(9, null, null), new node(10, new node(9, null, null), new node(14, new node(13, null, null), null)));
function isBST(currNode){
if(currNode.Left === null && currNode.Right === null) return true;
if(currNode.Left.Value > currNode.Value || currNode.Right.Value < currNode.Value) return false;
if(currNode.Left === null) return isBST(currNode.Right);
if(currNode.Right === null) return isBST(currNode.Left);
return (isBST(currNode.Left) && isBST(currNode.Right));
}
console.log(isBST(head));
撇开:详细的可读代码胜过少行,难以阅读 99.99%的时间。 0.01%是因为你是一个坏老师的班级,他更关心行数,而不是实际看你的作业。
除了#2 :为了便于阅读,通常应将长度超过约80个字符的行拆分为多行。没有人喜欢阅读一长串代码。
编辑:对于在示例@ stanford.edu
之后建模的真实BSTvar head = new node(5,
new node(3,
new node(1, null, null),
new node(4, null, null)
),
new node(9,
new node(6, null, null),
null
)
);