題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的循環雙向鏈表。要求不能創建任何新的節點,只能調整樹中節點指針的指向。
思路
代碼
#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:'None')->'Node':
def dfs(cur):
if not cur: return
dfs(cur.left)
if self.pre:
self.pre.right, cur.left = cur, self.pre
else:
self.head = pre
self.pre = cur #指針後移
dfs(cur.right)
if not root: return
self.pre = None
dfs(root)
self.head.left, self.pre.right= self.pre, self.head
return self.head
複雜度
時間複雜度 O(N) : N爲二叉樹的節點數,中序遍歷需要訪問所有節點。
空間複雜度 O(N) : 最差情況下,即樹退化爲鏈表時,遞歸深度達到 N,系統使用 O(N) 棧空間。