劍指offer面試題36. 二叉搜索樹與雙向鏈表(中序遍歷)(遞歸)

題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的循環雙向鏈表。要求不能創建任何新的節點,只能調整樹中節點指針的指向。
在這裏插入圖片描述

思路

詳見鏈接

代碼

#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) 棧空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章