You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承参数化Node<Integer>类添加sum方法无需重定义left/right的实现方案

Java二叉树Integer节点新增sum方法的可行方案

以下是不需要重定义父类left、right属性的两种实现思路,按是否可修改原Node<T>类代码区分:

不可修改原Node<T>类代码

方案1:静态工具方法(推荐,无类型安全问题)

直接实现独立的工具类方法处理求和逻辑,无需继承父类,调用简单:

public class NodeUtils {
    public static int sum(Node<Integer> node) {
        if (node == null) {
            return 0;
        }
        int sum = node.info;
        sum += sum(node.left);
        sum += sum(node.right);
        return sum;
    }
}

调用方式为NodeUtils.sum(目标节点),逻辑和你预期的成员方法完全一致。

方案2:子类强转(适合必须用成员方法调用的场景)

只要你构建二叉树时所有节点的left、right都赋值为NodeOfIntegers实例,可在子类sum方法中做强转:
首先修正你的子类构造方法写法:

public class NodeOfIntegers extends Node<Integer> {
    public NodeOfIntegers(Integer info) {
        super(info);
    }

    public int sum() {
        int sum = this.info;
        if (this.left != null) {
            sum += ((NodeOfIntegers) this.left).sum();
        }
        if (this.right != null) {
            sum += ((NodeOfIntegers) this.right).sum();
        }
        return sum;
    }
}

注意:该方案要求树中所有节点都是NodeOfIntegers实例,否则会抛出ClassCastException,建议重写父类的left、right赋值方法限制入参类型,避免运行时报错。

可修改原Node<T>类代码

可以将父类改造为自限定泛型结构,无需重定义left、right属性,即可让属性类型自动匹配子类:

// 改造后的父类
public class Node<T, N extends Node<T, N>> {
    T info;
    N left;
    N right;

    public Node(T info) {
        this.info = info;
    }
}

子类实现如下,可直接调用left、right的sum方法:

public class NodeOfIntegers extends Node<Integer, NodeOfIntegers> {
    public NodeOfIntegers(Integer info) {
        super(info);
    }

    public int sum() {
        int sum = this.info;
        if (left != null) sum += left.sum();
        if (right != null) sum += right.sum();
        return sum;
    }
}

该方案完全类型安全,无需强制类型转换。


内容的提问来源于stack exchange,提问作者patmuir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:36:06