代码之家  ›  专栏  ›  技术社区  ›  72909903

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

  •  1
  • 72909903  · 技术社区  · 8 年前

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

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

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

    我在正确的轨道上吗?

    3 回复  |  直到 8 年前
        1
  •  3
  •   Sergey Kalinichenko    8 年前

    递归方法的逻辑需要反映您用母语思考方法执行的操作的方式。就你而言,树上的一切都是 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行。

        2
  •  2
  •   Vadim Kotov First Zero    8 年前

    但在调用·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);
    }
    
        3
  •  1
  •   developer_hatch    8 年前

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

    public static boolean everything1(IntBTNode root) {
        if (root == null) {
            return true;
        } else {
            return (root.data == 1) && everything1(node.left) && everything1(root.right)
        }
    }
    
    1. 检查根(节点)是否为null,如果为null,则返回 true .
    2. && false 执行在那里结束,您要检查是否所有项目都已完成 1
    3. 递归检查值是否在左节点中
    4. 递归检查值是否在右侧节点中