我想在java中編寫一個函數來將二叉樹轉換爲DLL。該函數執行沒有錯誤,但該DLL沒有被創建。以下是功能。 root是指向樹根的指針,並且頭指向DLL的起始節點。將二進制樹轉換爲雙向鏈表
public void dll(Node x)
{
if(x==null)
{
return;
}
else
{
if(x==root)
{
Node temp=root;
while(temp.left!=null)
{
temp=temp.left;
}
head=temp;
}
if(x.left!=null)
{
System.out.println(x.data);
Node lchild=x.left;
Node rightmost=lchild;
while(rightmost.right!=null)
{
rightmost=rightmost.right;
}
x.left=rightmost;
rightmost.right=x;
dll(lchild);
}
if(x.right!=null)
{
System.out.println(x.data);
Node rchild=x.right;
Node leftmost=rchild;
while(leftmost.left!=null)
{
leftmost=leftmost.left;
}
x.right=leftmost;
leftmost.left=x;
dll(rchild);
}
}
}
}
的邏輯如下: 查找左子樹的最右邊,併爲根的前一個節點,找到最左邊的右子樹,並使其未來的根。遞歸應用於子樹。
當我嘗試打印head.right,它給我空指針異常。 153
Exception in thread "main" java.lang.NullPointerException
at BTtoDll.main(BTtoDll.java:153)
線是 -
System.out.println(t.head.right.data);
所以我從你的標籤瞭解你正在得到一個NPE?你可以用完整的堆棧跟蹤它嗎? – m0skit0
可能重複[什麼是空指針異常?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception) –
這是一個邏輯錯誤,不是NPE。請停止downvoting。我錯過了我的邏輯中的東西,這就是爲什麼節點沒有正確連接,其他明智的權利不應該是空的,我知道什麼是NPE,我不明白爲什麼權利爲零 – nitinsh99