Java 二叉树的addChild方法
对于一个项目,我编写了自己的二叉树类。我需要递归地构建一个左子树和右子树,因此我添加了一个makeBinaryTreeNode方法,它接受根、左子树和右子树。在这里面,我知道我需要在创建两个leftChild和rightChild树后调用一种叫做addChild的方法来保存子树的数据,但是我不知道如何为二叉树实现编写addChild方法。我看过其他实现,其中子节点存储在节点列表中(Java 二叉树的addChild方法,java,algorithm,structure,binary-tree,Java,Algorithm,Structure,Binary Tree,对于一个项目,我编写了自己的二叉树类。我需要递归地构建一个左子树和右子树,因此我添加了一个makeBinaryTreeNode方法,它接受根、左子树和右子树。在这里面,我知道我需要在创建两个leftChild和rightChild树后调用一种叫做addChild的方法来保存子树的数据,但是我不知道如何为二叉树实现编写addChild方法。我看过其他实现,其中子节点存储在节点列表中(//每棵树也是一个节点) 公共类二进制树扩展节点{ 私有二叉树父节点; 私有二叉树节点; 私有二叉树右节点; 公共二
//每棵树也是一个节点)
公共类二进制树扩展节点{
私有二叉树父节点;
私有二叉树节点;
私有二叉树右节点;
公共二叉树(){
}
}
公共类节点{
T值;
}
这取决于二叉树的类型,大多数二叉树都有某种平衡,以防止查找时间不理想的树。
如果您不必进行平衡,那么有多种方法可以将子节点添加到节点
一个例子是:
有两种类型的节点第一个叶节点没有子节点,第二个内部节点有两个子节点。现在写入addChild可以如下所示:
在叶节点上:
public Node addChild(Node n){
return new InnerNode(this,n); //without balancing new InnerNode(n,this); is fine to
}
在内部节点上:
public Node addChild(Node n){
left = left.addChild(n); //without balancing right = right.addChild(n); is fine to
return this;
}
但如果不平衡,这是毫无意义的,并且总是退化为某种链表
一个简单的平衡是计算分支中的叶节点。对于叶节点,这是1,对于InnerNode,这是左+右叶节点的总和。然后,您可以始终将新节点添加到叶较少的一侧
但他们的方法是更好的平衡技术,例如在红黑树上
public Node addChild(Node n){
left = left.addChild(n); //without balancing right = right.addChild(n); is fine to
return this;
}