检查二叉树中的节点是否有子节点?

时间:2015-07-31 16:49:32

标签: java binary-tree

我是二元树的新手,我想知道如何编写一个方法来检查树中的某个节点是否是一个叶子(没有子节点)

public boolean isChild(int item){
    TreeNode cursor = root;
    if (cursor.getLeft() == null && cursor.getRight() == null){
        return true;
    }
}

到目前为止,这就是我所拥有的。

3 个答案:

答案 0 :(得分:1)

基本上,如果你的二叉树对象有RightNodeLeftNode个实例变量,你应该能够找出节点是否是带有以下代码的叶子:

   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;
}