2011-05-26 58 views
1

嘿家伙, 我已经实现了一棵树。对我来说,它应该正常工作,但因为我在这里,所以没有。为了记录,我的树的类型是City,它有三个字段,其中一个是您将看到的名称。看看我的代码:创建树并添加值

void add(City added, City parent){ 
//added is what is going to be added and child of parent. I first find parent in tree 
//search method is coming after 
    TreeNode<City> parentNode = search(parent,this); 
    if (parentNode.hasLeftChild() && parentNode.getLeftChild().getCity().equals(parent)) 
     parentNode = parentNode.getLeftChild(); 
    else if (parentNode.hasNextSibling() && parentNode.getNextSibling().getCity().equals(parent)) 
     parentNode = parentNode.getNextSibling(); 
    else if (!parentNode.hasLeftChild()) 
     parentNode.setLeftChild(new TreeNode<City>(added,null,null)); 
    else { 
     TreeNode<City> next = parentNode.getLeftChild(); 
     while(next.hasNextSibling()) 
      next = next.getNextSibling(); 
     next.setNextSibling(new TreeNode<City>(added,null,null)); 
    } 
} 

public TreeNode<City> search(City parent, TreeNode<City> t){ 
    if (t.getCity().equals(parent)) 
     return t; 
    else if (t.hasLeftChild()) 
     return search(parent,t.getLeftChild()); 
    else 
     return search(parent,t.getNextSibling()); 
} 

我一直在采取nullpointerexception,不知道该怎么做。任何人都有更好的想法来搜索一个元素并添加它。或者至少有一个网站让我学习这个狗屎?

+0

什么是NPE的堆栈跟踪?它应该告诉你它发生的确切的代码行,这使得对每个人来说,排除故障变得容易很多。 – 2011-05-26 19:07:26

+0

是的,我看到问题出在哪里。当我为leftchild调用方法时,如果最终的孩子不是我正在寻找的孩子,它会给出错误。我想知道如何解决它 – 2011-05-26 19:20:22

回答

0

您必须测试您的树为空的基本情况,以便您试图添加的节点将真正成为树的根。

+0

我保证不会发生。树将在其中的一个城市中创建 – 2011-05-26 18:59:54