如何通过递归方法来保持BST数组填充时的计数

问题描述:

我想通过预置树遍历来填充数组,但我认为我已经在如何保留计数器正确。我的toString()方法调用preorder方法,但它只输出null。我怎样才能解决这个问题?如何通过递归方法来保持BST数组填充时的计数

public AVLTreeNode[] preorder() 
{ 
    /* 
    * return an array of AVLTreeNodes in preorder 
    */ 
    AVLTreeNode[] preorder = new AVLTreeNode[size]; 
    int count = 0; 
    return preorder(root, count, preorder); 
} 

private AVLTreeNode[] preorder(AVLTreeNode data, int count, AVLTreeNode preorder[]) 
{ 
    if (data == null) 
    { 
     return preorder; 
    } 
    preorder[count] = data; 
    if (data.getLeft() != null) 
    { 
     preorder(data.getLeft(), count++, preorder); 
    } 
    if (data.getRight() != null) 
    { 
     preorder(data.getRight(), count++, preorder); 
    } 
    return preorder; 
} 

count有错误的价值,因为与count++preorder后续调用的count实际值传递给方法和事后count增加。在从左节点count返回后,其值可能会比传递给右节点的呼叫的值高。解决办法有两个:

  1. 使用全局private int count;,并呼吁preorder之前将其设置为0

  2. 返回新count代替AVLTreeNode[]并将其分配给该方法的本地count,以获得正确的值。 AVLTreeNode[] preorder也可以是一个私有变量。

+0

现在我得到一个输出,但它不是正确的。通过输入{3,1,5,2},它给出输出{3,1,5,null}。我检查了该树包含值2,它回来了。任何想法为什么它会错过1的正确孩子? – scraig