使用递归从二叉树中删除叶子

时间:2015-07-16 18:49:21

标签: java algorithm binary-tree

我尝试使用此逻辑执行此操作但我收到错误

ApiController

整棵树按原样打印。请不要改变我的逻辑来帮助我。

4 个答案:

答案 0 :(得分:1)

在你的if语句中

if(root.left==null && root.right==null)
{
    BinaryTreeNode<Integer> temp = null;
    root = temp;
}

您将root声明为temp,即null,然后将该temp传递给removeLeaves函数。因此,当if语句为true时,您将null传递给该函数。

答案 1 :(得分:0)

BinaryTreeNode<Integer> temp = null;
root = temp;

基本上将root设为null,然后拨打root.left =&gt; NPE

您可能希望添加必要的空检查,并可能重新考虑您的功能。

答案 2 :(得分:0)

您需要单独检查每个根目录是否为null。你的if语句

    if(root.left==null && root.right==null)
    {
       BinaryTreeNode<Integer> temp = null;
       root = temp;
    }

仅检查两个根是否为空。但是说没有左叶(root.left为null)并且只有一个右叶,你仍然在左侧执行

    removeLeaves(root.left);

但是,我们已经知道root.left为null。我建议在每次调用removeLeaves()或修改现有的if语句之前添加单独的检查。

答案 3 :(得分:0)

我不相信这不是家庭作业,但是这里有。

null异常是因为即使左侧和右侧都为null,您仍在调用removeLeaves()。你试过在你的主IF()之后放一个别的吗?

public static void removeLeaves(BinaryTreeNode<Integer> root)
{
    if(root == null)  
    {
        return; // enclosing conditionals in braces is better form, saves lots of headaches later
    }


    if(root.left==null && root.right==null)
    {
        BinaryTreeNode<Integer> temp = null;
        root = temp;
    }
    else //at least one is not null
    {
        removeLeaves(root.left);
        removeLeaves(root.right);
    }
}