【发布时间】:2023-03-25 05:53:01
【问题描述】:
我必须为 java 中的 BinaryTree 类解决以下构造函数:
BinaryTree(GeneralTree<T> aTree)
此方法应从 General Tree (gt) 创建一个 BinaryTree (bt),如下所示:
gt 中的每个顶点都将表示为 bt 中的叶子。
- 如果 gt 是叶子,那么 bt 将是与 gt 具有相同值的叶子
- 如果 gt 不是叶,则 bt 将被构造为一个空根、一个左子树 (lt) 和一个右子树 (lr)。 Lt 是从 gt 的最旧子树(最左子树)创建的严格二叉树,lr 是从 gt 创建的不带最左子树的严格二叉树。
第一部分很琐碎,但第二部分给我带来了一些麻烦。我已经走到这一步了:
public BinaryTree(GeneralTree<T> aTree){
if (aTree.isLeaf()){
root= new BinaryNode<T>(aTree.getRootData());
}else{
root= new BinaryNode<T>(null); // empty root
LinkedList<GeneralTree<T>> childs = aTree.getChilds(); // Childs of the GT are implemented as a LinkedList of SubTrees
child.begin(); //start iteration trough list
BinaryTree<T> lt = new BinaryTree<T>(childs.element(0)); // first element = left-most child
this.addLeftChild(lt);
aTree.DeleteChild(hijos.elemento(0));
BinaryTree<T> lr = new BinaryTree<T>(aTree);
this.addRightChild(lr);
}
}
这是正确的方法吗?如果没有,你能想出更好的方法来解决这个问题吗?例如,这个解决方案给了我一堆根本没有数据的节点,我不知道这是问题本身的问题还是我的问题。
谢谢!
【问题讨论】:
-
你能详细说明“给我一些麻烦”的意思吗?
-
嗨,马特,感谢您的回答。 “给我一些麻烦”可能不是最好的表达方式,也许吧?我只是说我不确定这是否是解决问题的最佳方法。这是我找到的最好的方法,但它有一些问题,例如二叉树可能会在没有数据的节点上出现一堆,我认为这可能不是那么好?
-
GeneralTree 中的节点是否允许有两个以上的子节点?如果是这样,你如何在你的 b-tree 中处理这个?
-
GeneralTree 中的节点理论上可以有任意数量的子节点。这个想法是这样的:我得到了 GT 的 Childs(一个链表)我得到了第一个(最左边的孩子)并用它创建了一个新的 BinaryTree()。然后我从树中删除那个孩子,并用树的其余部分创建一个新的 BinaryTree()。从理论上讲,它应该处理每个孩子,除非我遗漏了什么,这是可能的。再次感谢。
标签: java constructor tree binary-tree