题目:
思路+代码:
class Solution:
# 思路:二叉搜索树中序遍历才是递增,又因为要求是双向链表,cur.left= self.pre; self.pre.right=cur
# 特例:如果root不存在,return
# 初始化self.pre=None
# 递归调用中序遍历,构建除首尾两个节点之外的双向链表;
# 中序遍历递归结束后,设置head.left = pre; pre.right=head,构成循环链表
# 递归思路:
# 1.递归结束:if not root说明到达叶子节点;
# 2.当前递归层:对当前节点,cur.left=pre; pre.right=cur;进行左,根,右递归顺序;并在第一时间找出head节点
# 3.返回值:没有返回值,因为已经设置了self.head
def treeToDoublyList(self, root: 'Node') -> 'Node':
def recur(root):
if not root: return
recur(root.left)
if self.pre:
self.pre.right, root.left = root, self.pre
else:
self.head = root
self.pre = root
recur(root.right)
if not root:
return
self.pre = None
recur(root)
self.head.left, self.pre.right = self.pre, self.head
return self.head