2013-09-01 77 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); 

} 

希望这将是有益的。