这是我在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数据)的代码,它也可以工作。
答案 0 :(得分:1)
他们做不同的事情。一个新节点没有子节点,一个节点有2个子节点。虽然第二个适用于两者,但它提供了更方便和更容易阅读的API。
答案 1 :(得分:0)
仅使用public IntTreeNode(int data, IntTreeNode left, IntTreeNode right)
运行代码将是完全合法的代码。
这里的2个构造函数是为了方便起见。对于叶节点,不可能有子树。因此,单参数构造函数提供了一种添加叶节点的便捷方法,子树默认为null
。另一方面,任何非叶子节点最多可以有2个子树,因此存在第二个构造函数来创建这样的节点。
答案 2 :(得分:0)
每个构造函数都有自己的角色。
在创建只有一个根节点的树时使用第一个构造函数。
在创建具有左节点和右节点的树时,将使用第二个构造函数。这些节点可以是其他树,因此您可以使用第二个构造函数来连接多个树。
答案 3 :(得分:0)
从技术上讲,你是对的,只需要第二种方法。但是当写成两个函数时,它会更加清晰,一个用于叶子,另一个用于分支节点。否则,必须告知调用者将IntTreeNode作为数据调用,null,为叶子调用null。