二叉树:方法 return TRUE 如果所有值都等于特定值

Binary Tree: Method to return TRUE if all values equal a specific value

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

到目前为止,我有以下内容:

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 行。

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

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)
    }
}
  1. 检查根(节点)是否为空,如果是,就return true.
  2. 否则,检查根数据是否为 ​​1,与 && 短路,因为如果得到 false 执行到此结束,并且您想检查所有项目是否为 [=15] =]
  3. 递归检查值是否在左节点
  4. 递归检查值是否在正确的节点中