从二叉树中的叶子中寻找K元素

时间:2014-06-16 15:05:21

标签: java

我首先找到高度,然后是k值我正在进行后期打印以打印元素,但它显示NullPointer异常,因为没有打印数据。

Java代码:

public void kDisplay(int k) {
    auxkDisplay(root, k);
}

public void auxkDisplay(TreeNode root1, int k) {
    int l = h(root1);
    if (l - k == 0)
        return;
    System.out.print(root1.data + "-");
    auxkDisplay(root1.left, k++);
    auxkDisplay(root1.right, k++);
}

public int h(TreeNode current) {
    TreeNode current1 = current;
    if (current1 == null)
        return -1;
    int l = 1 + h(current1.left);
    int r = 1 + h(current1.right);
    return Math.max(l, r);
}

1 个答案:

答案 0 :(得分:1)

你的问题出在这个递归中,你错过了一个基本案例:

public void auxkDisplay(TreeNode root1, int k) {
    if(root1 == null)  // to avoid calling null.left or null.right
       return;

    int l = h(root1);
    if (l - k == 0)
        return;
    System.out.print(root1.data + "-");
    auxkDisplay(root1.left, k++);
    auxkDisplay(root1.right, k++);
}

如果你调用left或right node或root1而不检查当前的root1是否不等于null,那么在某个时候,leafs将没有任何子节点,因此传递leafs节点(null)将会结束调用null.left或null.right将导致NullPointerException