描述
将一个二叉搜索树就地转化为一个已排序的双向循环链表。可以将左右孩子指针作为双向循环链表的前驱和后继指针。
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。
下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。
思路
利用中序遍历 非递归来实现
注意记录上一个node即可
由于leetcode上 这个题不支持go 因此用的python写的
实现
"""
# Definition for a Node.
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
"""
class Solution:
def treeToDoublyList(self, root: 'Node') -> 'Node':
if root == None:
return None
stack = []
cur = root
new_head = None
last_node = None
top = None
while cur != None or len(stack) != 0:
while cur != None:
stack.append(cur)
cur = cur.left
top = stack[-1]
stack = stack[:-1]
cur = top.right
top.left = last_node
if last_node != None:
last_node.right = top
else:
new_head = top
last_node = top
new_head.left = top
top.right = new_head
return new_head