Data structures 通过2个修改将链表结构转换为二叉树结构

Data structures 通过2个修改将链表结构转换为二叉树结构,data-structures,linked-list,binary-tree,Data Structures,Linked List,Binary Tree,提到可以对链表数据结构进行的两种修改,以便将其转换为二叉树数据结构?这个问题相当模糊,但我认为这就是它的意思 链表中使用的结构将有一个next指针: struct LinkedListNode { LinkedListNode *next; // data element(s) }; 二叉树中使用的结构将具有左和右指针: struct BinaryTreeNode { BinaryTreeNode *left; BinaryTreeNode *right;

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

这个问题相当模糊,但我认为这就是它的意思

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

struct LinkedListNode {
    LinkedListNode *next;
    // data element(s)
};
二叉树中使用的结构将具有
指针:

struct BinaryTreeNode {
    BinaryTreeNode *left;
    BinaryTreeNode *right;
    // data element(s)
}
因此,我猜问题所指的两个修改可能是:

  • next
    指针更改为
    left
    指针
  • 添加一个
    右侧
    指针

  • 我没有得到点“2修改”, 但是要将
    LinkedList
    转换为
    BinaryTree
    ,我们可以遵循两种方法

  • 自下而上
  • 自上而下
  • 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);
    
    }
    
    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);
    
    }
    
    2)自下而上方法:

    在这种方法中,我们将首先创建子元素,然后再创建父元素

    这背后的基本逻辑是

    ListToBinaryTree(LinkedList list, int start, int end) {
    
       mid -> start + (end - start) / 2;
       left -> ListToBinaryTree(list, start, mid-1);
       right -> ListToBinaryTree(list, mid+1, end);
    
    }
    
    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);
    
    }
    

    希望这会有用。

    这里没有足够的上下文。什么样的修改?您是否仅限于在运行时可以完成的事情?或者您是否包括可以在源代码级别进行的结构修改?还是别的?我不知道是什么样的修改。我认为这是一些简单的理论,但我无法理解。我不需要编程,但我需要解释如何将链表数据结构更改为二叉树。这是一个过去时的问题。我不知道如何才能更好地解释。哪种
    链接列表
    ?单独的,双重的还是其他的?