树节点持有链表

时间:2014-03-11 19:33:48

标签: java object linked-list binary-search-tree

好的,我要做的是让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;
    }

}
}

2 个答案:

答案 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;
    }
  }
}

其他方法非常相似。您只需要记住链表操作通常与列表遍历相关联。希望这会有所帮助。