c#中的bst高度算法

时间:2017-05-04 19:51:36

标签: c# algorithm binary-search-tree

public int TreeHeight(int depth)
{
    if (left != null && right == null)
        return left.TreeHeight(depth);
    else if (left == null && right != null)
        return right.TreeHeight(depth);
    else
        return left.TreeHeight(depth) + right.TreeHeight(depth);
}

树看起来像这样:http://imgur.com/EBS30rl

您好,我正在使用一种返回树高的方法算法。 该方法只能访问左右节点。变量深度作为参数已经为方法本身带来了值1(计算树的根)。 我尝试过递归调用方法,但结果并不接近预期。 我之前的代码与下面的代码类似。

 self.resortCopy = function(item) {
 self.resorts.push(item);
 self.backendCall(item) // this needs to be performed after returning true
 return true;

1 个答案:

答案 0 :(得分:3)

definition

  

节点的高度是该节点与叶子之间最长路径上的边数。

对于BST,它可以递归表示为(伪代码):

height(node) =  
{
    0, when node == null  
    1 + max(height(node.left), height(node.right)), when node != null  
}

因此,递归方法不需要depth参数,可以是这样的:

public int TreeHeight()
{
    return 1 + Math.Max(
        left != null ? left.TreeHeight() : 0,
        right != null ? right.TreeHeight() : 0
    );
}

和C#6 null conditional operator,实现可能很简单:

return 1 + Math.Max(left?.TreeHeight() ?? 0, right?.TreeHeight() ?? 0);