2015-09-20 111 views
2

我想知道基本的算法来计算二叉搜索树Java的二叉搜索树_从根到最近的叶子

我想用这样的代码从根 最接近叶距离的距离,

public int closeness() { 
    return closeness(root); 
} 

public int closeness(Node x) { 

} 

谢谢。

+0

你的树是否平衡? –

+0

不需要平衡 – IAMBEAST

回答

3

你需要采取的最低的每一个分支的“接近性”加一:

public int closeness(Node x) { 
    if (x == null) { 
    return Integer.MAX_VALUE; 
    } 
    if (x.left == null && x.right == null) { 
    return 0; 
    } 
    return Math.min(closeness(x.left), closeness(x.right)) + 1; 
} 

或者稍微详细无“MAX_VALUE”招忽略空分支Math.min()

public int closeness(Node x) { 
    if (x.left == null) { 
    if (x.right == null) { 
     return 0; 
    } 
    return closedness(x.right) + 1; 
    } 
    if (x.right == null) { 
    return closedness(x.left) + 1; 
    } 
    return Math.min(closeness(x.left), closeness(x.right)) + 1; 
} 
+0

我认为这是不对的..... – IAMBEAST

+0

有什么问题?也许澄清/扩大这个问题? –

+1

emmm okay叶节点没有任何孩子,但if语句没有一个孩子时返回。但是,当我将其更改为&&时,它会使空指针异常错误... – IAMBEAST

1

实现您的需求的一个快速构思是递归地遍历BST(左和右子树)并沿途计算在到达叶节点之前必须经过的节点数。最后,您可以使用简单的MIN/MAX函数来确定最接近根的叶节点。请注意,这个想法适用于计算距离,而不是实际(最近的)叶节点本身。我认为实施这个应该不会太困难。如果您有任何其他问题,请随时询问。