好的,我要做的是让BSTree的每个节点都持有一个链表 例如:
Node B holds - bill, buff, blank
Then its left child A holds - ant, art, app
And its right child C holds - cat, can crib
And so on;
这是我到目前为止所做的,但我不确定这是最好的方法
public class BSTreeDic {
public class LinkNode{
LinkNode word;
LinkNode next;
public void add(LinkNode wd, LinkNode def){
if (word==null){
word=wd;
next=def;
}else{
LinkNode currentNode = word;
while(currentNode.next!=null){
currentNode=currentNode.next;
}
currentNode.next=def;
next=currentNode.next;
}
}
}
public class Node{
LinkNode word;
Node left;
Node right;
Node(LinkNode wd, LinkNode def){
word = new LinkNode();
word.add(wd, def);
left=right=null;
}
}
}
答案 0 :(得分:0)
如果您不想使用(并导入)类java.util.LinkedList:
public class LinkNode { //Please begin class names with caps
String word;
LinkNode next = null;
LinkNode(String w) {
word = w;
}
}
public class Node {
LinkedList<Node> word;
Node left;
Node right;
Node(String wd, String def) {
word = new LinkedList<Node>();
word.add(def);
word.add(wd);
}
}
此外,对于二进制搜索树,如果搜索是按字母顺序排列的,那么左边的孩子应该在字母表中比他们的父母更早。
您还应该为LinkNode和Node添加add()和remove()方法,以添加和删除节点。一种可能性是调用Node TreeNode并生成Node类的LinkNode和TreeNode子类。
答案 1 :(得分:0)
你非常接近。我建议添加的唯一想法是一个实际的LinkedList对象,它包含对列表头的引用,允许添加,删除,检索等。
public class LinkedList {
ListNode head;
ListNode tail;
public void addElement(ListNode ln) {
if (head == null) {
head = ln;
tail = ln;
}
else {
ListNode currentNode = head;
while(currentNode.next!= null) {
currentNode = currentNode.next;
}
currentNode.next = ln;
tail = currentNode.next;
}
}
}
其他方法非常相似。您只需要记住链表操作通常与列表遍历相关联。希望这会有所帮助。