我尝试使用此逻辑执行此操作但我收到错误
ApiController
整棵树按原样打印。请不要改变我的逻辑来帮助我。
答案 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);
}
}