我会提到这是为了做作业。我非常困惑我需要做些什么来使这个add()函数起作用。令人困惑的部分是我们需要将左右子项定义为BinaryTree
类型,并使add()函数采用String
而不是Node
,我在每个这个网站上的例子。我无法弄清楚如何将字符串设置为新的子节点,类型为BinaryTree。
任何帮助&感谢指导。
import java.util.*;
public class BinaryTree {
private String data;
private BinaryTree leftChild;
private BinaryTree rightChild;
public BinaryTree() {
data = null;
leftChild = null;
rightChild = null;
}
public BinaryTree(String d) {
data = d;
leftChild = null;
rightChild = null;
}
public BinaryTree(String d, BinaryTree left, BinaryTree right) {
data = d;
leftChild = left;
rightChild = right;
}
public String getData() { return data; }
public BinaryTree getLeftChild() { return leftChild; }
public BinaryTree getRightChild() { return rightChild; }
public void setData(String d) { data = d; }
public void setLeftChild(BinaryTree left) { leftChild = left; }
public void setRightChild(BinaryTree right) { rightChild = right; }
public String root;
//This function is what I'm stuggling with
public void add(String item){
if(root==null)
{
root = item;
}
else
{
String tmp = root; // save the current root
if(root.compareTo(item)>0)
{
setData(item);
add(item); //I should have setBinaryTree(item) here, but I can't convert type String to BinaryTree?.
}
else if(root.compareTo(item)<0)
{
setData(item);
add(item);
}
root = tmp; // put the root back to its original value
}
return;
}
}
答案 0 :(得分:0)
您需要在遍历树时递归。您当前正在尝试在同一节点添加。做这样的事情。
if(root.compareTo(item)>0)
{
if (leftChild == null) {
leftChild = new BinaryTree(item);
} else {
leftChild.add(item);
}
}
为正确的孩子做类似的事情。
答案 1 :(得分:0)
您需要做的是使用提供的构造函数创建一个新的BinaryTree对象,并将其分配给左或右子。
public void add(String item){
if(root==null){
root = item;
}else{
String tmp = root; // save the current root
BinaryTree bTree = new BinaryTree()
if(root.compareTo(item)>0){
bTree.setData(item);
setLeftChild(bTree);
}else if(root.compareTo(item)<0){
bTree.setData(item);
setRightChild(bTree);
}
root = tmp; // put the root back to its original value
}
return;
}