Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二叉树:如果所有值都等于特定值,则返回TRUE的方法_Java_Tree_Binary Tree_Tree Traversal - Fatal编程技术网

Java 二叉树:如果所有值都等于特定值,则返回TRUE的方法

Java 二叉树:如果所有值都等于特定值,则返回TRUE的方法,java,tree,binary-tree,tree-traversal,Java,Tree,Binary Tree,Tree Traversal,在Java中,我正在编写一个布尔方法,该方法遍历整个二叉树以获得特定值,例如整数值1,如果所有节点都是该值,则该方法返回true 到目前为止,我有以下几点: public static boolean everything1(IntBTNode root) { if (root.data == 1) { everything1(root.left); return true; everything1(root.right); }

在Java中,我正在编写一个布尔方法,该方法遍历整个二叉树以获得特定值,例如整数值1,如果所有节点都是该值,则该方法返回true

到目前为止,我有以下几点:

public static boolean everything1(IntBTNode root) {
    if (root.data == 1) { 
        everything1(root.left);
        return true;
        everything1(root.right);
    }
}

我在正确的轨道上吗?

递归方法的逻辑需要反映您用母语思考方法执行操作的方式。在您的情况下,当以下所有条件均为真时,树中的所有内容都为1:

节点本身是1,并且 左边的所有内容都是1,并且 右边的都是1 当节点本身为null(这是基本情况)时,这一点也非常正确

当您开始实现递归方法时,假设它已经可供您使用。因此,代码可以编写如下:

public static boolean everything1(IntBTNode node) {
    return (node == null)
        || (node.data == 1 && everything1(node.left) && everything1(root.right));
}

对everything1的递归调用与上面描述的第2行和第3行相对应。

递归方法的逻辑需要反映您用母语思考方法执行的操作的方式。在您的情况下,当以下所有条件均为真时,树中的所有内容都为1:

节点本身是1,并且 左边的所有内容都是1,并且 右边的都是1 当节点本身为null(这是基本情况)时,这一点也非常正确

当您开始实现递归方法时,假设它已经可供您使用。因此,代码可以编写如下:

public static boolean everything1(IntBTNode node) {
    return (node == null)
        || (node.data == 1 && everything1(node.left) && everything1(root.right));
}

对everything1的递归调用对应于上面描述的第2行和第3行。

但是在调用·everything1·之前,我认为应该确定IntBTNode节点是否为null

public static boolean everything1(IntBTNode node, int key) {
    if(node == null) return true;
    if(node.data != key){
        return false;
    }
    return everything1(node.left, key) && everything1(node.right, key);
}

但在调用·everything1·之前,我认为应该确定IntBTNode是否为null

public static boolean everything1(IntBTNode node, int key) {
    if(node == null) return true;
    if(node.data != key){
        return false;
    }
    return everything1(node.left, key) && everything1(node.right, key);
}

首先,return语句之后的每一行代码永远不会执行。小心点。其次,如果要使用递归,我推荐下一种方法:

public static boolean everything1(IntBTNode root) {
    if (root == null) {
        return true;
    } else {
        return (root.data == 1) && everything1(node.left) && everything1(root.right)
    }
}
检查根节点是否为null,如果为null,则返回true。 否则,请检查根数据是否为1,是否与&&短路,因为如果为false,则执行将在此处完成,并且您希望检查所有项是否为1 递归检查该值是否位于左节点中 递归检查该值是否位于右侧节点中
首先,return语句之后的每一行代码永远不会执行。小心点。其次,如果要使用递归,我推荐下一种方法:

public static boolean everything1(IntBTNode root) {
    if (root == null) {
        return true;
    } else {
        return (root.data == 1) && everything1(node.left) && everything1(root.right)
    }
}
检查根节点是否为null,如果为null,则返回true。 否则,请检查根数据是否为1,是否与&&短路,因为如果为false,则执行将在此处完成,并且您希望检查所有项是否为1 递归检查该值是否位于左节点中 递归检查该值是否位于右侧节点中
但是如果节点为null,它将始终返回true,是吗?应该是节点吗!=null&&node.data==1@不,用| |是正确的。如果你这样做,程序将永远不会返回true。aaaaah,我现在看到了,很好的答案:D,甚至更短。但是如果节点为null,它将始终返回true,是吗?应该是节点吗!=null&&node.data==1@不,用| |是正确的。如果您这样做,程序将永远不会返回true。aaaaah,我现在看到了,很好的答案:D,甚至更短。做得好,偶数通常不仅适用于1,这里加1。做得好,偶数通常不仅适用于1,这里加1。@EJP实际上我不确定。。。一开始我以为false@EJP事实上我不确定。。。起初我的想法是错误的