我是二元树的新手,我想知道如何编写一个方法来检查树中的某个节点是否是一个叶子(没有子节点)
public boolean isChild(int item){
TreeNode cursor = root;
if (cursor.getLeft() == null && cursor.getRight() == null){
return true;
}
}
到目前为止,这就是我所拥有的。
答案 0 :(得分:1)
基本上,如果你的二叉树对象有RightNode
和LeftNode
个实例变量,你应该能够找出节点是否是带有以下代码的叶子:
public static boolean isLeaf(TreeNode tree){
if(tree.getRight() == null && tree.getLeft() == null){
return true;
}
return false;
}
另外,我并不完全理解int item
作为方法参数的目的。
答案 1 :(得分:0)
TreeNode cursor = root;
以上行会使您的代码出错。因为每次拨打isChild()
时,该功能都会检查您的root
是否有左右孩子。
您的isChild()
函数应将树node
作为参数,并检查此node
是否有孩子。
根据需要:
如果树中的特定节点是叶子
所以尝试类似:
// the following function returns true if currnetNode is a leaf, false otherwise
public boolean isLeaf(TreeNode currnetNode){
//assuming that caller already checked currnetNode is not null
if (currnetNode.getLeft() == null && currnetNode.getRight() == null){
return true;
}
return false;
}
答案 2 :(得分:0)
假设二叉树中的整数是唯一的,则必须首先找到具有该整数值的节点。因此,编写一个方法findNode(int item),它返回与item具有相同值的TreeNode。您的方法的其余部分没问题,除非您必须返回false,如果if语句不为true,否则您将收到编译错误。
public boolean isChild(int item){
TreeNode cursor = findNode(item);
if (cursor.getLeft() == null && cursor.getRight() == null){
return true;
}
return false;
}