原题链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/
二叉搜索树---------》循环双向链表。不能创建任何新的节点,只能调整树中节点指针的指向。
二叉搜索树:左《根《右
特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。
"""
# 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':
self.head=None
self.tail=None
if not root:
return
def convert(cur):
if not cur:
return
convert(cur.left)
if not self.tail: #表明还没转换
self.head=cur #头结点
else:
self.tail.right=cur #已经转换好的节点
cur.left=self.tail
self.tail=cur #当前节点赋给用来标记的尾结点
convert(cur.right) #遍历右节点
convert(root)
self.head.left=self.tail #把头节点的左指针指向尾结点
self.tail.right=self.head #把尾节点的右指针指向头结点
return self.head