当我添加一个节点时,例如,在insert方法中命名为“Bob”:
public void insert(String aLabel){
//left recursion:
if(this.getLabel().compareTo(aLabel) <= 0) {
if (childrenLeft == null) {
BSTreeNode aNode = new BSTreeNode(aLabel,this);
return;
}
else {
childrenLeft.insert(aLabel);
}
}
//right recursion
else {
if (childrenRight==null) {
BSTreeNode aNode = new BSTreeNode(aLabel,this);
return;
}
else{
childrenRight.insert(aLabel);
}
}
}
我的树只在树的左侧添加一个没有标签的空白节点。 (BSTreeNode aNode = new BSTreeNode;)有什么问题吗?因为当我对节点进行硬编码时:
BSTreeNode Louis = new BSTreeNode("Louis", treeRoot);
BSTreeNode bonny = new BSTreeNode( "bonny", treeRoot);
BSTreeNode Sue = new BSTreeNode("Anne", bonny);
BSTreeNode Sam = new BSTreeNode("Sam",Louis);
BSTreeNode Anne2 = new BSTreeNode( "delta", bonny);
BSTreeNode Frank = new BSTreeNode("Kalle", Louis);
树显示标签并插入所需位置。 其他代码 - 构造函数:
public BSTreeNode( String aLabel,BSTreeNode aParent){
label = aLabel;
parent = aParent;
//add this node as a child of this node's parent either left or right
if(parent != null){
if(parent.getLabel().compareTo(label)<= 0) {
parent.addLeftChild(this);
}
if(parent.getLabel().compareTo(label)> 0) {
parent.addRightChild(this);
}
}
}
这是在创建节点时将节点添加到父节点的构造函数。 添加childleft和正确的方法:
private void addLeftChild(BSTreeNode aNode){
if(childrenLeft == null) this.childrenLeft = aNode;
}
private void addRightChild(BSTreeNode aNode) {
if(childrenRight == null) this.childrenRight = aNode;
}
答案 0 :(得分:0)
大多数二叉树遵循不同的风格,并在递归方法中设置父母的左/右孩子,而不是孩子上升并告诉某人它是他们的新父母
对于大多数二叉树的运行方式,此代码更为标准:
public void insert(String aLabel)
{
if(getLabel().compareTo(aLabel) <= 0)
if(childrenLeft == null)
childrenLeft = new BSTreeNode(aLabel, this);
else
childrenLeft.insert(aLabel);
else
if(childrenRight == null)
childrenRight = new BSTreeNode(aLabel, this);
else
childrenRight.insert(aLabel);
}
该代码应该正确保存正在创建的BSTreeNodes的值,并且具有额外的效果,即减少关于父母如何获得它的孩子的混淆
对于大多数人来说,让父母生孩子,而不是让孩子到达一个节点并告诉它是街区的新孩子,这对我们来说更有意义
答案 1 :(得分:0)
你的逻辑可能有点瑕疵。
从构建器添加时,您直接调用addLeftChild
或addRightChild
。这些函数检查右/左节点是否为null
,如果为空,则添加该值。但是如果它不是空的呢。然后它应该与左/右孩子进行比较并继续,否则节点不会被添加(即,功能通过&amp;不返回任何内容作为其void
)。