如何在此代码中分配变量?

时间:2016-02-20 13:53:07

标签: c# algorithm recursion tree

我正在编写用于检查二进制树平衡与否的代码,并且遇到了下面的片段,这完全正常但我无法理解“lh”和“lr”变量的值何时以及如何在下面的代码中分配。这些是vairables,这是c#代码。

public bool IsBalanced(Node node,out int height, bool isleft)
{
    int lh, lr;
    if(node==null)
    {
        height = 0;
        Console.WriteLine("NULL");
        return true;
    }
    if (isleft)
        Console.WriteLine("L " + node.data);
    else if(!isleft)
        Console.WriteLine("R " + node.data);
    bool balanced = IsBalanced(node.left,out lh, true) & IsBalanced(node.right,out lr,false);
    height = Math.Max(lh, lr) + 1;
    Console.WriteLine("lh :" + lh + " and " + "lr :" +lr);
    Console.WriteLine("height :" + height);
    return balanced & (Math.Abs(lh - lr) <=1);
}

2 个答案:

答案 0 :(得分:0)

分配它们的方法是IsBalanced 您将注意到以下行:

IsBalanced(node.left,out lh, true)
IsBalanced(node.right,out lr,false)

在这种情况下,您会看到out lh传递给方法。这会将 lh 的引用传递给方法,从而允许它为变量赋值。

实际作业为:(out int height)

height = 0;
height = Math.Max(lh, lr) + 1;

答案 1 :(得分:0)

正如here所述,out用于表示方法,必须为参数赋值,调用方法可以使用该参数。即IsBalanced(node.left,out lh, true)IsBalanced作为参数调用lh,该方法将覆盖该参数。之后,调用者方法可以使用IsBalanced中分配的值。

所以IsBalanced基本上以参数节点为根计算子树的高度,并使用该值更新height - 方法参数。