Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二叉树的addChild方法_Java_Algorithm_Structure_Binary Tree - Fatal编程技术网

Java 二叉树的addChild方法

Java 二叉树的addChild方法,java,algorithm,structure,binary-tree,Java,Algorithm,Structure,Binary Tree,对于一个项目,我编写了自己的二叉树类。我需要递归地构建一个左子树和右子树,因此我添加了一个makeBinaryTreeNode方法,它接受根、左子树和右子树。在这里面,我知道我需要在创建两个leftChild和rightChild树后调用一种叫做addChild的方法来保存子树的数据,但是我不知道如何为二叉树实现编写addChild方法。我看过其他实现,其中子节点存储在节点列表中(//每棵树也是一个节点) 公共类二进制树扩展节点{ 私有二叉树父节点; 私有二叉树节点; 私有二叉树右节点; 公共二

对于一个项目,我编写了自己的二叉树类。我需要递归地构建一个左子树和右子树,因此我添加了一个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;
}