原题链接: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
本文介绍如何将给定的二叉搜索树通过就地修改节点指针实现转化为循环双向链表,同时保留排序特性,最后返回链表的第一个节点。
6159

被折叠的 条评论
为什么被折叠?



