我的C#代码:
public int printallancestor(Node root, Node key)
{
if(root == null)
return 0;
if(root == key)
return 1;
if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))
{
Console.WriteLine(root.iData);
return 1;
}
return 0;
}
以上代码中的以下行if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))
我得到以下错误无法应用于'int'和'int'类型的操作数。这有什么问题?
答案 0 :(得分:3)
看起来像你的方法:
printallancestor(root.leftChild,key)
返回一个整数值,并且您尝试在条件中使用它。您只能在类似于现在的情况下使用布尔类型
我相信你希望你的方法分别返回1
或0
的真假,你现在无法在C#中做你正在做的事情。你可以尝试:
if(printallancestor(root.leftChild,key) == 1|| ....
或者,如果您希望值大于1,则为:
if(printallancestor(root.leftChild,key) > 1) // true
您可能会看到:
|| Operator (C# Reference)
条件OR运算符(||)执行其bool的逻辑OR 操作数即可。如果第一个操作数的计算结果为true,则为第二个操作数 没有评估。如果第一个操作数的计算结果为false,则第二个操作数 operator确定OR表达式是否作为整体求值 是真还是假。
答案 1 :(得分:0)
printallancestor的返回类型是int。 你正在使用||用于bool的运算符。 试试
if(printallancestor(root.leftChild,key) != 0||printallancestor(root.rightChild,key) != 0)
应解决问题。
答案 2 :(得分:0)
运算符OR(||)需要两个bool操作数,而不是int。
答案 3 :(得分:0)
您的方法返回int
,但您尝试在if条件下使用。那不行。您只能使用条件bool
类型。
试试这样;
if(printallancestor(root.leftChild,key) == 1|| ..
条件OR运算符(||)执行其bool的逻辑或运算 操作数。
答案 4 :(得分:0)
这样做
public bool printallancestor(Node root, Node key)
{
if(root == null)
return false;
if(root == key)
return true;
if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))
{
Console.WriteLine(root.iData);
return true;
}
return false;
}