[英]Traversal of a tree to find a node
我正在搜索樹以查找傳遞的值。 不幸的是,它不起作用。 我開始用打印機調試它,奇怪的是它實際上找到了值,但是跳過了return語句。
/**
* Returns the node with the passed value
*/
private TreeNode searchNodeBeingDeleted(Comparable c, TreeNode node)
{
if(node == null)
{
return null;
}
if(c.equals((Comparable)node.getValue()))
{
System.out.println("Here");
return node;
}
else
{
if(node.getLeft() != null)
{
System.out.println("left");
searchNodeBeingDeleted(c, node.getLeft());
}
if(node.getRight() != null)
{
System.out.println("right");
searchNodeBeingDeleted(c, node.getRight());
}
}
return null; //i think this gives me my null pointer at bottom
}
它打印出如下結果:
left
left
right
right
Here
right
left
right
left
right
Exception in thread "main" java.lang.NullPointerException
at Program_14.Driver.main(Driver.java:29)
我不知道這是否有幫助,但這是我的樹:
L
/ \
D R
/ \ / \
A F M U
\ / \
B T V
謝謝你的時間。
嘗試這個:
private TreeNode searchNodeBeingDeleted(Comparable c, TreeNode node)
{
if(node == null)
{
return null;
}
if(c.equals((Comparable)node.getValue()))
{
System.out.println("Here");
return node;
}
else
{
if(node.getLeft() != null)
{
System.out.println("left");
TreeNode n = searchNodeBeingDeleted(c, node.getLeft());
if (n != null) {
return n;
}
}
if(node.getRight() != null)
{
System.out.println("right");
TreeNode n = searchNodeBeingDeleted(c, node.getRight());
if (n != null) {
return n;
}
}
}
return null; //i think this gives me my null pointer at bottom
}
您應該返回遞歸調用,而不是在方法結束時返回null
。
像這樣的東西:
private TreeNode searchNodeBeingDeleted(Comparable c, TreeNode node) {
if(nodle == null) return null;
int diff = c.compareTo((Comparable)node.getValue());
if (diff == 0) { // yes, we found a match!
System.out.println("Here");
return node;
}
else if (diff < 0) { // traverse to the left
System.out.println("left");
return searchNodeBeingDeleted(c, node.getLeft());
}
else { // traverse to the right
System.out.println("right");
return searchNodeBeingDeleted(c, node.getRight());
}
}
我認為你必須返回searchNodeBeingDeleted(c, node.getLeft())
和searchNodeBeingDeleted(c, node.getRight())
,而不僅僅是調用那些方法。
您正在函數中使用遞歸。 您看到的'here'是從同一函數創建的函數調用的結果。 所以它會向'遞歸'函數返回一個值,此時你還沒有完成,即使你找到了答案,你仍然需要繼續向上傳播它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.