为什么我们需要多个构造函数来在Java中定义二叉树?

时间:2014-07-17 04:02:18

标签: java constructor binary-tree

这是我在Java中定义二叉树的代码

// Class definition for binary tree 
// Class for storing a single node of a binary tree of ints
// Cannot be set to be private because this should be accessed by the public class method

public class IntTreeNode {
    public int data;
    public IntTreeNode left;
    public IntTreeNode right;

    // constructs a leaf node with given data
    public IntTreeNode(int data) {
        this(data, null, null);
    }

    // constructs a branch node with given data, left subtree,
    // right subtree
    public IntTreeNode(int data, IntTreeNode left, 
                       IntTreeNode right) {
        this.data = data;
        this.left = left;
        this.right = right;
    }
}

我可以问为什么我们应该有两个构造函数,public IntTreeNode(int data)和public IntTreeNode(int data,IntTreeNode left,IntTreeNode right)?我从客户端类运行没有公共IntTreeNode(int数据)的代码,它也可以工作。

4 个答案:

答案 0 :(得分:1)

他们做不同的事情。一个新节点没有子节点,一个节点有2个子节点。虽然第二个适用于两者,但它提供了更方便和更容易阅读的API。

答案 1 :(得分:0)

仅使用public IntTreeNode(int data, IntTreeNode left, IntTreeNode right)运行代码将是完全合法的代码。

这里的2个构造函数是为了方便起见。对于叶节点,不可能有子树。因此,单参数构造函数提供了一种添加叶节点的便捷方法,子树默认为null。另一方面,任何非叶子节点最多可以有2个子树,因此存在第二个构造函数来创建这样的节点。

答案 2 :(得分:0)

每个构造函数都有自己的角色。

在创建只有一个根节点的树时使用第一个构造函数。

在创建具有左节点和右节点的树时,将使用第二个构造函数。这些节点可以是其他树,因此您可以使用第二个构造函数来连接多个树。

答案 3 :(得分:0)

从技术上讲,你是对的,只需要第二种方法。但是当写成两个函数时,它会更加清晰,一个用于叶子,另一个用于分支节点。否则,必须告知调用者将IntTreeNode作为数据调用,null,为叶子调用null。