Java 阵列在打印二叉树路径时初始化了冗余零

Java 阵列在打印二叉树路径时初始化了冗余零,java,arrays,data-structures,tree,binary-tree,Java,Arrays,Data Structures,Tree,Binary Tree,我试图打印二叉树中的所有路径。我可以打印树中的所有路径。但问题是它没有在输出中打印一些多余的零。数组是否初始化为零?如果是,那么在这种情况下如何克服问题?我正在学习,这就是为什么我把这个问题贴在这里,以了解更多并克服错误 public class PrintAllPath { static void printAllPaths(Tree tree) { int[] paths = new int[1000]; printPathsRecur(tree, paths, 0); }

我试图打印二叉树中的所有路径。我可以打印树中的所有路径。但问题是它没有在输出中打印一些多余的零。数组是否初始化为零?如果是,那么在这种情况下如何克服问题?我正在学习,这就是为什么我把这个问题贴在这里,以了解更多并克服错误

public class PrintAllPath {

static void printAllPaths(Tree tree) {
    int[] paths = new int[1000];
    printPathsRecur(tree, paths, 0);
}

static void printPathsRecur(Tree tree, int paths[], int pathlen) {
    if (tree == null)
        return;
    paths[pathlen++] = tree.val;
    pathlen++;

    if (tree.left == null && tree.right == null) {
        printArray(paths, pathlen);
    } else {
        printPathsRecur(tree.left, paths, pathlen);
        printPathsRecur(tree.right, paths, pathlen);
    }
}

static void printArray(int paths[], int pathlen) {
    for (int i = 0; i < pathlen; i++) {
        System.out.println("Node : " + paths[i]);
    }
}

static Tree insert(Tree tree, int element) {
    Tree tree2 = new Tree(element, null, null);
    if (tree == null)
        tree = tree2;
    else if (element < tree.val)
        tree.left = insert(tree.left, element);
    else
        tree.right = insert(tree.right, element);
    return tree;
}

static void print(Tree tree) {
    if (tree == null)
        return;
    System.out.println(tree.val);
    print(tree.left);
    print(tree.right);
}

public static void main(String[] args) {
    Tree tree = new Tree(new Integer(5), null, null);
    tree = insert(tree, 10);
    tree = insert(tree, 100);
    tree = insert(tree, 11);
    tree = insert(tree, 110);
    tree = insert(tree, 50);
    System.out.println("The tree is as follows : ");
    print(tree);
    printAllPaths(tree);
}
}

是的,在Java中,
newint[X]
创建零初始化数组

发件人:

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9、§15.10)。。。对于int类型,默认值为零,即0

不管怎么说,得到零的原因是每次插入元素时都会增加两次
pathlen
,因此插入一个元素,然后跳过下一个元素(将其保留为0):


您只需增加一次。

您将pathlen增加两次。删除第二个pathlen++。是的,Java将把所有原语初始化为默认值,包括数组中的原语

您犯的错误是在
printpathsrefur(Tree-Tree,int-path[],int-pathlen)

将pathlen增加两个。仅删除
pathlen++从您的代码工作良好

static void printPathsRecur(Tree tree, int paths[], int pathlen) {
    if (tree == null)
        return;
    paths[pathlen++] = tree.val;
    //pathlen++;

    if (tree.left == null && tree.right == null) {
        printArray(paths, pathlen);
    } else {
        printPathsRecur(tree.left, paths, pathlen);
        printPathsRecur(tree.right, paths, pathlen);
    }
}

是的,我认为路径[pathlen++]=tree.val;不需要。仅路径[pathlen]=tree.val;不仅仅是原语:一切都是初始化的。引用类型只得到
null
paths[pathlen++] = tree.val;
pathlen++;
paths[pathlen++] = tree.val;
pathlen++;
static void printPathsRecur(Tree tree, int paths[], int pathlen) {
    if (tree == null)
        return;
    paths[pathlen++] = tree.val;
    //pathlen++;

    if (tree.left == null && tree.right == null) {
        printArray(paths, pathlen);
    } else {
        printPathsRecur(tree.left, paths, pathlen);
        printPathsRecur(tree.right, paths, pathlen);
    }
}