1

我的 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' 类型的操作数。这有什么问题?

4

5 回答 5

4

它看起来像你的方法:

printallancestor(root.leftChild,key)

返回一个整数值,并且您正试图在条件中使用它。您只能像现在这样在条件下使用布尔类型

我相信您期望您的方法分别返回1或返回0true 和 false,您无法在 C# 中执行您现在正在执行的操作。你可以试试:

if(printallancestor(root.leftChild,key) == 1|| .... 

或者,如果您期望大于 1 的值为真,则:

if(printallancestor(root.leftChild,key) > 1) // true

你可能会看到:
|| 运算符(C# 参考)

条件或运算符 (||)对其布尔操作数执行逻辑或。如果第一个操作数的计算结果为真,则不计算第二个操作数。如果第一个操作数的计算结果为 false,则第二个运算符确定整个 OR 表达式的计算结果为 true 还是 false。

于 2012-12-25T07:05:07.110 回答
0

printallancestor 的返回类型是 int。您正在使用 || 用于布尔的运算符。尝试

if(printallancestor(root.leftChild,key) != 0||printallancestor(root.rightChild,key) != 0)

这应该可以解决问题。

于 2012-12-25T07:06:17.873 回答
0

运算符 OR (||) 需要两个 bool 操作数,而不是 int。

于 2012-12-25T07:06:17.897 回答
0

您的方法返回int,但您尝试在 if 条件下使用。那不行。您可以使用仅条件bool类型。

像这样试试;

if(printallancestor(root.leftChild,key) == 1|| ..  

条件或运算符 (||) 对其布尔操作数执行逻辑或。

于 2012-12-25T07:07:04.073 回答
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;
    }
于 2012-12-25T07:07:25.303 回答