提到可以对链表数据结构进行2次修改,以便将其转换为二叉树数据结构?
答案 0 :(得分:1)
这个问题相当含糊,但我认为这可能意味着什么。
链表中使用的结构将具有next
指针:
struct LinkedListNode {
LinkedListNode *next;
// data element(s)
};
二叉树中使用的结构将有left
和right
指针:
struct BinaryTreeNode {
BinaryTreeNode *left;
BinaryTreeNode *right;
// data element(s)
}
所以,我猜这个问题的两个修改可能是:
next
指针更改为left
指针right
指针答案 1 :(得分:0)
我没有得到“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);
}
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);
}
希望这会有用。