2016-02-26 51 views
0

我试图确认搜索树是遵循排序规则(左边的小号码和右边的大号码)。 这是工作正常(递归)的右侧,但左侧是关闭的。Java二进制树搜索顺序左侧不工作

当树看起来像这样:

  100     
    50   150 
    55 75  125 175 

如果我打印输出,I可以看到,它会检查50 < 100和150> 100,则它向下移动的权利检查125和175> 150.它检查125和175,但后来跳到55和75,从来没有比较55 < 50(false)和75> 50.

有人可以请解释我'米做错了吗?

public boolean isSearchTree(){ 
    boolean result = true; 

    if (left != null) result = left.isSearchTree(); 
    if (right != null) result = right.isSearchTree(); 

    if (left != null && left.value >= value){ 
     return false; 
    } 
    if (right != null && right.value <= value){ 
     return false; 
    } 

    return result; 
} 

回答

0

你从左边的树在这里覆盖result

if (right != null) result = right.isSearchTree(); 

建立一个快捷方式:

if (!left.isSearchTree()) { 
    return false; 
} 

if (!right.isSearchTree()) { 
    return false; 
} 

if (left != null && left.value >= value){ 
    return false; 
} 

if (right != null && right.value <= value){ 
    return false; 
} 

return true; 
1

您从left.isSearchTree()right.isSearchTree()值覆盖你的result旧值。这意味着如果两者都是非空的,它将一直放弃左侧搜索树的结果,并且只确保右侧是有效的,以及当前的级别。由于这些条件中的任何一个都是假的,意味着整个事情就是,只是返回;就像你在中等条件下所做的一样。

if (left != null && !left.isSearchTree()) return false; 
if (right != null && !right.isSearchTree()) return false; 

if (left != null && left.value >= value) return false; 
if (right != null && right.value <= value) return false; 

return true; 

或者稍微更紧凑,

if(left != null && (!left.isSearchTree() || left.value >= value)) return false; 
if(right != null && (!right.isSearchTree() || right.value <= value)) return false; 
return true;