初始化二叉树的两个子树而不出现 "bad operand types for binary operator" 错误?
Initialize both subtrees of a binary tree without getting "bad operand types for binary operator" error?
我无法理解为什么我不能在同一语句中初始化树的两边。我的任务是递归 return 二叉树所有叶子的列表(如果树为空,则 return null),但我得到的只是
"error: bad operand types for binary operator '&&'
return nbrLeaves(root.left, pong) && nbrLeaves(root.right, pong);"
我假设已经实现了带有节点的二叉树class。
我的代码如下:
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);
}
&&
是二进制 AND 运算符。它只接受 boolean
个参数,所以你不能将 List
传递给它。
由于您将输出添加到传递给您的方法的 ArrayList
,因此它不需要 return 类型,并且您可以消除所有 return 语句。
可以这样写:
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;
}
}
我无法理解为什么我不能在同一语句中初始化树的两边。我的任务是递归 return 二叉树所有叶子的列表(如果树为空,则 return null),但我得到的只是
"error: bad operand types for binary operator '&&'
return nbrLeaves(root.left, pong) && nbrLeaves(root.right, pong);"
我假设已经实现了带有节点的二叉树class。
我的代码如下:
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);
}
&&
是二进制 AND 运算符。它只接受 boolean
个参数,所以你不能将 List
传递给它。
由于您将输出添加到传递给您的方法的 ArrayList
,因此它不需要 return 类型,并且您可以消除所有 return 语句。
可以这样写:
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;
}
}