在java中,我应该如何通过将深度作为输入来创建二叉树?
在我的例子中,我想通过将深度作为输入来创建一个二叉树 例如,如果我执行tree.create(3),当最左边的深度为3时,将生成一个二叉树,这意味着树中将有2^3-1个节点,所有节点的值都将为0。该指数将为0-6在java中,我应该如何通过将深度作为输入来创建二叉树?,java,data-structures,Java,Data Structures,在我的例子中,我想通过将深度作为输入来创建一个二叉树 例如,如果我执行tree.create(3),当最左边的深度为3时,将生成一个二叉树,这意味着树中将有2^3-1个节点,所有节点的值都将为0。该指数将为0-6 class Tree<T> { int depth; int index; T value; public Tree(int index,T value) { this.index = index; thi
class Tree<T> {
int depth;
int index;
T value;
public Tree(int index,T value) {
this.index = index;
this.value = value;
}
public static <K> Tree<K> create(int depth){
if(depth >= 1) {
//return a tree with the inputting depth,
//but I don't know how to do in this step
return new Tree(...?)
}
}
}
类树{
智力深度;
整数指数;
T值;
公共树(int索引,T值){
这个指数=指数;
这个值=值;
}
公共静态树创建(int-depth){
如果(深度>=1){
//返回具有输入深度的树,
//但我不知道这一步该怎么做
返回新树(…?)
}
}
}
我应该使用哪部分知识来用Java实现这一点?谢谢 使用二叉树数据结构时,通常需要编写递归方法。编写递归方法时,需要编写终止递归的条件。在您的例子中,如果达到了所需的深度,递归将结束。为了确定我们是否达到了预期深度,我们需要知道预期深度和当前深度。我将假设二叉树中根节点的深度为零。这意味着最大深度为3级(如您问题中的示例所示),最深的级别将为2级。如果我们还没有达到所需的深度,那么我需要添加一个左和右子节点,然后对每个子节点调用相同的方法,并确保子节点的深度比父节点的深度大一个。因此,我的递归方法需要三个参数:
- 要(可能)将子节点添加到的节点
- 当前深度
- 最大深度
OutOfMemoryError
,因为递归方法调用的次数是有限的
import java.util.ArrayList;
导入java.util.List;
公共类二叉树{
二萜根;
公共静态二叉树创建(int-depth,T-val){
如果(深度>0){
BinTree theTree=新的BinTree();
tree.root=新的BinTreeNode(val);
tree.addLevel(tree.root,0,深度);
返回树;
}
否则{
抛出新的IllegalArgumentException(“无效深度:+depth”);
}
}
公共真空组件(BinTreeNode阳极,列表){
如果(阳极==null){
返回;
}
否则{
获取等位元素(阳极、左侧、列表);
列表.添加(阳极.一般对象);
获取等位元素(阳极、右侧、列表);
}
}
私有void addLevel(BinTreeNode theNode,int-level,int-deep){
如果(级别==最深-1){
返回;
}
theNode.left=新的BinTreeNode(theNode.generiobject);
theNode.right=新的BinTreeNode(theNode.generiobject);
添加级别(节点左侧,级别+1,最深);
添加级别(节点右侧,级别+1,最深);
}
公共静态void main(字符串[]args){
BinTree aTree=BinTree.create(3,“George”);//最大深度=25
列表=新的ArrayList();
aTree.getAllegements(aTree.root,list);
System.out.println(list.size());
}
}
二萜类{
左、右二叉树烯醇;
T一般对象;
公共二叉树节点(T obj){
genericObject=obj;
}
}
注意,我添加了方法getAllegements
,以测试是否创建了正确数量的节点