2013-07-02 70 views
0
public static BiNode linklist(BiNode root) 
{ 
    BiNode head = null, tail=null; 
    convertBST(head, tail, root); 
    return head; 
} 



public static void convertBST(BiNode head, BiNode tail, BiNode root) 
{ 
    BiNode leftTail = null, rightHead = null; 
    if(root==null){ 
     head = null; 
     tail = null; 
     return; 
    } 
    System.out.println("root = "+root.key); 
    convertBST(head, leftTail, root.node1); 
    convertBST(rightHead, tail, root.node2); 
    if(leftTail != null) 
    { 
     System.out.println("leftTail = "+leftTail.key); 
     leftTail.node2 = root; 
     root.node1 = leftTail; 
    }else{ 
     head = root; 
     System.out.println("head = "+ head.key+", root = "+root.key); 
    } 

     if(rightHead != null) 
     { 
     rightHead.node1 = root; 
     root.node2 = rightHead; 
     }else{ 
     tail = root; 
     System.out.println("tail = "+ tail.key+", root = "+root.key); 
     } 
    } 

上面是我的java代碼,它用於將BST轉換爲雙鏈表。將二叉搜索樹轉換爲JAVA中的鏈接列表

但我不知道爲什麼頭總是改變,這應該指向鏈接列表的頭部,而不是改變。

我很高興,偉大的頭腦會幫助我調試此代碼!謝謝!!!

+0

你能發佈'linklist()'和'convertBST()'的代碼嗎?其他代碼似乎都不會影響您的BST到鏈接列表邏輯,因此它只是將所有內容混淆在一起。 如果一切都整齊地縮進,它也會有所幫助。 –

回答

1

的基本關鍵,爲什麼代碼是錯的是這行:head = root;tail = root;的方法public static void convertBST(BiNode head, BiNode tail, BiNode root)

我們假定你是,當你將參數設置爲一個新的節點將被傳播調用堆棧(請參考)。 Java不會這樣做。當您執行head = root;時,您只更改了本地值head而不是調用方法中的值。

因此在方法public static BiNode linklist(BiNode root){head永遠是null和方法將總是返回null

+0

我明白了。但如何解決它?我知道如何解決在c/c + +中的這種問題,但如何解決它在JAVA?再次感謝你 – city

+0

返回值或傳遞值的可變包裝 –