2013-09-01 76 views
-1

提及可對鏈接列表數據結構進行2個修改,以便將其轉換爲二叉樹數據結構?將鏈接列表結構轉換爲具有2個修改的二叉樹結構

+0

這裏沒有足夠的上下文。什麼樣的修改?你是否限於可以在運行時完成的事情?還是你包括可以在源代碼級完成的結構修改?或者是其他東西? –

+0

我不知道什麼樣的修改。我認爲這是一些簡單的理論,但我無法理解。 我不需要編程,但我需要解釋如何鏈接列表數據結構可以更改爲二叉樹。 這是過去的紙質問題。 我不知道如何更好地解釋。 – Charlot

+0

哪種'LinkedList'?單獨,雙重還是其他? –

回答

1

這個問題相當含糊,但這是我認爲可能的含義。

在鏈表使用的結構將有一個next指針:

struct LinkedListNode { 
    LinkedListNode *next; 
    // data element(s) 
}; 

二叉樹使用將有leftright指針的結構:

struct BinaryTreeNode { 
    BinaryTreeNode *left; 
    BinaryTreeNode *right; 
    // data element(s) 
} 

所以,我猜問題涉及的兩個修改可能是:

  1. next指針更改爲left指針
  2. 添加right指針
0

我沒有得到一點「2修改」, 而是一個LinkedList轉換爲BinaryTree,我們可以按照兩種方法

  1. 自下而上
  2. 自上而下

1)自頂向下的方法:

在這種方法中,我們可以把兩個LinkedList子列表和中間部分將是父節點的每個 呼籲左邊和右邊的子榜單遞歸方法。

這背後的基本邏輯就可以了,

ListToBinaryTree(LinkedList list, int start, int end) { 

    mid -> start + (end - start)/2; 
    left -> ListToBinaryTree(list, start, mid-1); 
    right -> ListToBinaryTree(list, mid+1, end); 

} 

2)自下而上的方法:

在這種方法中,我們將第一和比父元素創建子元素。

這背後的基本邏輯就可以了,

ListToBinaryTree(ListNode *& list, int start, int end) { 

    mid -> start + (end - start)/2; 
    leftChild -> ListToBinaryTree(list, start, mid-1); 
    parent -> new BinaryTree(list -> data); 
    parent -> left = leftChild; 
    list = list -> next; 
    parent -> right = ListToBinaryTree(list, mid+1, end); 

} 

希望這將是有益的。