在此代码中如何分配变量?
How variables are getting assigned in this code?
我正在编写用于检查二叉树是否平衡的代码,并遇到了下面的代码片段,这工作得很好但我无法理解 'lh' 和 'lr' 变量的值何时以及如何在下面的代码中分配。这些是可用的,这是 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);
}
赋值方法为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;
如here所述,out
用于指示一个方法,它必须给一个参数赋值,它可以被调用者方法。 IE。 IsBalanced(node.left,out lh, true)
以 lh
作为参数调用 IsBalanced
,它将被该方法覆盖。之后调用者方法可以使用在 IsBalanced
.
中分配的值
所以IsBalanced
基本上计算以参数节点为根的子树的高度,并用该值更新height
-方法参数。
我正在编写用于检查二叉树是否平衡的代码,并遇到了下面的代码片段,这工作得很好但我无法理解 'lh' 和 'lr' 变量的值何时以及如何在下面的代码中分配。这些是可用的,这是 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);
}
赋值方法为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;
如here所述,out
用于指示一个方法,它必须给一个参数赋值,它可以被调用者方法。 IE。 IsBalanced(node.left,out lh, true)
以 lh
作为参数调用 IsBalanced
,它将被该方法覆盖。之后调用者方法可以使用在 IsBalanced
.
所以IsBalanced
基本上计算以参数节点为根的子树的高度,并用该值更新height
-方法参数。