对二叉树的交互

时间:2015-05-18 04:06:22

标签: java binary-tree

我想知道如何在二叉树上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;
}

2 个答案:

答案 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;
}