我想知道如何在二叉树上Iterate
来接收其中的元素数量。
到目前为止,这是我的代码:
public static int Iteration(Node<Integer> node){
if(node.getRight() != null && node.getLeft() != null)
return Iteration(node.getRight()) + Iteration(node.getLeft()) + count++;
else if(node.getRight() != null && node.getLeft() == null)
return Iteration(node.getRight()) + count++;
else if(node.getLeft() != null && node.getRight() == null)
return Iteration(node.getLeft()) + count++;
else
return count;
}
答案 0 :(得分:0)
这应该可以解决问题:
public static int countElements(Node<Integer> node) {
if(node == null) return 0;
// Left children plus right children plus current node
return countElements(node.getLeft()) + countElements(node.getRight()) + 1;
}
您可以传递一个节点或null,它将返回您传入的节点下面的节点数。如果您传入的节点是null
,它将立即返回0。否则,它将递归检查子节点并返回总和。
修改:举个例子,让我们看看下面的树:
A
/ \
B C
/ \
D E
如果您使用countElements(nodeA)
调用该方法,则会递归调用countElements(B)
和countElements(C)
。
countElements(B)
依次为其子节点调用该方法,这些子节点都为null,方法调用因此导致0. countElements(B)
返回0 + 0 + 1
,等于1。
对于countElements(C)
,它的工作方式相同,只有一个级别更深 - countElements(C)
返回3.
countElements(A)
现在返回1 + 3 + 1
,等于5,这也是树中节点的数量。
答案 1 :(得分:0)
这是递归地进行预订序遍历以获得节点计数
public static int getNodeCount(Node<Integer> node){
int count = 1;
if(node.getRight() != null)
count += getNodeCount(node.getRight());
if(node.getLeft() != null)
count += getNodeCount(node.getLeft());
return count;
}