我在Java中编写一个递归方法,试图打印所有叶子并返回二叉树的叶子数。 这是我的代码:
public int printAndCountLeaves(Node nd)
{
int size = 0;
Node left = nd.getLeft();
Node right = nd.getRight();
if(left != null && right != null)
{
size = size + printAndCountLeaves(left);
size = size + printAndCountLeaves(right);
}
else
{
System.out.println(data);
return (size + 1);
}
return size;
}
这是节点类:
public class Node
{
double data;
Node left;//left child
Node right;//right child
Node parent;
//Assume proper constructors and getters
}
我的代码是否可以用于打印所有叶子并返回完整二叉树的叶子数?
答案 0 :(得分:0)
每次进行递归调用时,您肯定需要添加1来计数,而不仅仅是在其子节点为空时。此外,如果您发送方法的树为空,您可能需要进行一些错误检查。此外,每次在if语句中按照现在的方式打印节点,它只打印底部的节点。
size++;
size += printAndCountLeaves(left) + printAndCountLeaves(right);
答案 1 :(得分:0)
我想这可能是更简单的递归方法来打印/只计算二叉树的叶节点。我们可以对任何树进行概括。
class Node {
int key;
Node left, right;
public Node() {}
public Node(int key) {
this.key = key;
}
}
// Consider this is global
List<Integer> list = new ArrayList<>();
void findLeaves(Node node) {
if (null == node) return;
findLeaves(node.left);
if (null == node.left && null == node.right) list.add(node.key);
findLeaves(node.right);
}