将链表结构转换为具有2个修改的二叉树结构

时间:2013-09-01 04:35:18

标签: data-structures linked-list binary-tree

提到可以对链表数据结构进行2次修改,以便将其转换为二叉树数据结构?

2 个答案:

答案 0 :(得分:1)

这个问题相当含糊,但我认为这可能意味着什么。

链表中使用的结构将具有next指针:

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

二叉树中使用的结构将有leftright指针:

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

所以,我猜这个问题的两个修改可能是:

  1. next指针更改为left指针
  2. 添加right指针

答案 1 :(得分:0)

我没有得到“2修改”的意思, 但要将LinkedList转换为BinaryTree,我们可以采用两种方法

  1. 自下而上
  2. 自上而下
  3. 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);
    
    }
    

    希望这会有用。