二叉搜索树与双向链表
问题简述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。
思路
根据二叉搜索树的性质,其中序遍历结果就是一个有序的单向链表;
因此本题要做的就是在中序遍历的过程中,修改指针的指向,得到双向链表;
考虑使用中序遍历访问树的各节点,记
cur
,初始化前驱节点pre=None
;在访问每个节点时构建
cur
和前驱节点pre
的引用指向;当
pre=None
时,说明该节点是最左叶子节点(中序遍历访问的第一个节点),即头结点ret
;否则修改双向节点引用,即pre.right = cur
,cur.left = pre
;在访问右子树前,将
pre
指向cur
;中序遍历完成后,最后构建头节点和尾节点的引用指向。
Last updated