1

我无法理解为什么我不能在同一个语句中初始化树的两边。我的任务是递归返回二叉树的所有叶子的列表(如果树为空则返回 null),但我得到的只是

"error: bad operand types for binary operator '&&'
    return nbrLeaves(root.left, pong) && nbrLeaves(root.right, pong);"

我假设已经实现了带有节点的二叉树类。

我的代码如下:

public List<E> leaves(){
    List<E> pong = new ArrayList<E>();
     if (root == null){
        return pong;
    }
    nbrLeaves(root, pong);
    return pong;
    }


    public List<E> nbrLeaves(Node<E> root, List<E> pong){
    
    if (root.left == null && root.right == null){
        pong.add(root.element);
    }
    if (root.left != null && root.right == null){
        return nbrLeaves(root.left, pong);
    } 
    if (root.left == null && root.right != null){
        return nbrLeaves(root.right, pong);
    }
    return nbrLeaves(root.left, pong) && nbrLeaves(root.right, pong);
}
4

1 回答 1

1

&&是二元 AND 运算符。它只接受boolean参数,因此您不能将Lists 传递给它。

由于您将输出添加到ArrayList传递给您的方法,它不需要返回类型,您可以消除所有返回语句。

你可以这样写:

public void nbrLeaves(Node<E> root, List<E> pong) {
    if (root.left == null && root.right == null) {
        pong.add(root.element);
    } else if (root.left != null && root.right == null) {
        nbrLeaves(root.left, pong);
    } else if (root.left == null && root.right != null) {
        nbrLeaves(root.right, pong);
    } else {
        nbrLeaves(root.left, pong);
        nbrLeaves(root.right, pong);
    }
}

如果您希望List通过递归方法创建输出而不是传递给它,您可以编写如下:

public List<E> nbrLeaves(Node<E> root) {
    if (root.left == null && root.right == null) {
        List<E> pong = new ArrayList<>;
        pong.add(root.element);
        return pong;
    } else if (root.left != null && root.right == null) {
        return nbrLeaves(root.left);
    } else if (root.left == null && root.right != null) {
        return nbrLeaves(root.right);
    } else {
        List<E> left = nbrLeaves(root.left);
        List<E> right = nbrLeaves(root.right);
        left.addAll(right);
        return left;
    }
}
于 2021-08-16T08:18:11.023 回答