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

C# 在此代码中如何分配变量?,c#,algorithm,recursion,tree,C#,Algorithm,Recursion,Tree,我在写检查二叉树平衡与否的代码时,遇到了下面的代码段,这个代码段工作得非常好,但我无法理解“lh”和“lr”变量的值是何时以及如何在下面的代码中赋值的。这些都是虚幻,这是c代码 public bool IsBalanced(节点节点、out int height、bool isleft) { 左内侧,左内侧; if(node==null) { 高度=0; 控制台。写入线(“空”); 返回true; } if(isleft) Console.WriteLine(“L”+节点.data); 如果(!

我在写检查二叉树平衡与否的代码时,遇到了下面的代码段,这个代码段工作得非常好,但我无法理解“lh”和“lr”变量的值是何时以及如何在下面的代码中赋值的。这些都是虚幻,这是c代码

public bool IsBalanced(节点节点、out int height、bool isleft)
{
左内侧,左内侧;
if(node==null)
{
高度=0;
控制台。写入线(“空”);
返回true;
}
if(isleft)
Console.WriteLine(“L”+节点.data);
如果(!isleft),则为else
Console.WriteLine(“R”+node.data);
bool balanced=IsBalanced(node.left,out-lh,true)和IsBalanced(node.right,out-lr,false);
高度=数学最大值(左侧、左侧)+1;
控制台写入线(“lh:+lh+”和“+”lr:+lr”);
控制台写入线(“高度:+高度);

返回balanced&(Math.Abs(lh-lr)分配它们的方法是
IsBalanced

正如您将注意到的,下面一行:

IsBalanced(node.left,out lh, true)
IsBalanced(node.right,out lr,false)
在本例中,您将看到
out lh
被传递给方法。这将lh的引用传递给方法,从而允许它为变量赋值

实际分配为:
(out int height)

如前所述,
out
用于通知一个方法,它必须为一个参数分配一个值,调用方方法可以使用该值。即
IsBalanced(node.left,out-lh,true)
使用
lh
作为参数调用
IsBalanced
,该参数将被方法覆盖。之后,调用方方法可以使用在
IsBalanced
中分配的值


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

IsBalanced是递归调用…在递归中没有赋值语句
IsBalanced(node.left,out lh, true)
IsBalanced(node.right,out lr,false)
height = 0;
height = Math.Max(lh, lr) + 1;