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