在我的例子中,我想通过将深度作为输入来创建一个二叉树。
例如,如果我做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;
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(...?)
}
}
}
我应该用哪一部分的知识来用java实现这一点?谢谢!
1条答案
按热度按时间3pmvbmvn1#
通常在使用二叉树数据结构时,需要编写递归方法。在编写递归方法时,需要编写终止递归的条件。在您的例子中,如果我们已经达到所需的深度,递归将结束。为了确定我们是否达到了期望的深度,我们需要知道期望的深度和当前的深度。我将假设二叉树中根节点的深度为零。这意味着对于最大深度3(如您问题中的示例),最深的级别将是级别2。如果我们还没有达到所需的深度,那么我需要添加一个左和右子节点,然后对每个子节点调用相同的方法,并确保子节点的深度比父节点的深度大一个。所以我的递归方法需要三个参数:
要(可能)将子节点添加到的节点
当前深度
最大深度
注意,我不需要处理每个节点包含的值(或数据),因为在您的问题中,您声明每个节点将具有相同的值。因此,我可以简单地将值从父节点复制到它的每个子节点。
下面是一个完整的例子。注意,当我测试它时,深度大于25会导致
OutOfMemoryError
因为递归方法调用的次数是有限制的。注意,我添加了
getAllElements
作为测试,以查看是否创建了正确数量的节点。