问题描述
就我而言,我想通过将深度作为输入来创建二叉树。
class BTreeNode<T> {
BTreeNode<T> left,right;
int index;
T value;
BTreeNode(T value,int index){
this.index = index;
this.value = value;
}
}
class Tree<T> {
int depth;
BTreeNode<T> root;
public static <K> eTree<K> create(int depth){
if(depth > 0) {
Tree<K> newtree = new SparseTree<>();
newtree.root = new BTreeNode<>(null,0);
newtree.addLevel(newtree.root,depth);
return newtree;
}
else {
throw new Error();
}
}
private void addLevel(BTreeNode<T> node,int depth,int deepest){
if(depth == deepest - 1) {
return;
}
// ???
node.left = new BTreeNode<>(node.value,node.index+1);
node.right = new BTreeNode<>(node.value,node.index+2);
addLevel(node.left,depth + 1,deepest);
addLevel(node.right,deepest);
}
}
然后,我想相应地为树中的每个节点添加一个索引。例如,对于具有 7 个节点(深度 == 3)的树,每个节点的索引将为 0 1 2 3 4 5 6。 我可以在我的代码中做什么来实现这一目标?我做了几次尝试,但都失败了。有什么建议么?谢谢!
解决方法
因为
index_left = 2*index_father+1
index_right = 2*index_father+2
你可以这样做
private void addLevel(BTreeNode<T> node,int depth,int deepest,int index){
if(depth == deepest - 1) {
return;
}
node.left = new BTreeNode<>(node.value,index*2+1);
node.right = new BTreeNode<>(node.value,index*2+2);
addLevel(node.left,depth + 1,deepest,index*2+1);
addLevel(node.right,index*2+2);
}