在二叉树中,检查给定节点是否为叶节点

时间:2015-12-13 08:57:29

标签: java data-structures binary-tree

我已编写代码来查找给定节点是否为叶节点,它适用于正面情况,即当输入的节点是叶节点时,代码代码遍历到节点,如果是叶子node,给出输出并停止,但当输入的节点不是叶子节点时,否定方案失败。代码保持遍历完整的树,即使它已经通过节点并且它不是叶节点。

boolean isLeaf(BTNode node, int data) {
   if (node == null) {
    return false;
   }
System.out.println("Node traversed :"+ node.data);
if (node.left == null && node.right == null && node.data == data) {
    System.out.println("Node : " + node.data + " is leaf node");
    return true;
}
return (isLeaf(node.left, data) || isLeaf(node.right, data));
}

如果找到节点并且它不是叶节点,任何人都可以告诉停止递归的条件是什么。

感谢。

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

boolean isLeaf(BTNode node, int data)
{
    if(node == null)       
        return false;
    if(node.left == null && node.right == null)      
        return true; 
    isLeaf(node.left); 
    isLeaf(node.right);      
}

实施方式的主要问题是:

return (isLeaf(node.left, data) || isLeaf(node.right, data));

你有没有想过实际执行时会发生什么?

编辑:如果您只想检查节点是否为叶子:

boolean isLeaf(BTNode node, int data){
    if(node == null)
        return false;    
    if(node.right == null && node.left == null)
        return true;
    retrun false; 
}

答案 1 :(得分:0)

那是因为你的代码包含遍历没有明显的原因。想想这个递归调用的作用 - return (isLeaf(node.left, data) || isLeaf(node.right, data));。这很可能是return false