C# 在此代码中如何分配变量?
我在写检查二叉树平衡与否的代码时,遇到了下面的代码段,这个代码段工作得非常好,但我无法理解“lh”和“lr”变量的值是何时以及如何在下面的代码中赋值的。这些都是虚幻,这是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); 如果(!
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;