题目:
对二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针;对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针。在结构上,两种结构有相似性,现在有一棵搜索二叉树,请将其转换为一个有序的双向链表。最后返回转换后的双向链表的头节点。
基本思路:
时间复杂度O(N),空间复杂度O(N)。
使用队列等容器收集二叉树中序遍历的结果,收集完毕后在按照队列中的顺序将每个节点串起来。代码实现如下:
def inOrderToQueue(head,queue):
if head == None:
return
inOrderToQueue(head.left,queue)
queue.append(head)
inOrderToQueue(head.right,queue)
def convert(head):
if head == None:
return None
queue = []
inOrderToQueue(head,queue)
head = queue.pop(0)
head.left = None
newHead = head
while queue:
node = queue.pop(0)
head.right = node
node.left = head
head = node
head.right = None
return newHead