劍指offer【36】:二叉搜索樹與雙向鏈表

題目:

思路+代碼:

class Solution:
    # 思路:二叉搜索樹中序遍歷纔是遞增,又因爲要求是雙向鏈表,cur.left= self.pre; self.pre.right=cur
    #   特例:如果root不存在,return
    #   初始化self.pre=None
    #   遞歸調用中序遍歷,構建除首尾兩個節點之外的雙向鏈表;
    #   中序遍歷遞歸結束後,設置head.left = pre; pre.right=head,構成循環鏈表
    # 遞歸思路:
    #   1.遞歸結束:if not  root說明到達葉子節點;
    #   2.當前遞歸層:對當前節點,cur.left=pre; pre.right=cur;進行左,根,右遞歸順序;並在第一時間找出head節點
    #   3.返回值:沒有返回值,因爲已經設置了self.head
    def treeToDoublyList(self, root: 'Node') -> 'Node':
        def recur(root):
            if not root: return
            recur(root.left)

            if self.pre:
                self.pre.right, root.left = root, self.pre
            else:
                self.head = root
            self.pre = root
            recur(root.right)
            
        if not root:
            return
        self.pre = None
        recur(root)
        self.head.left, self.pre.right = self.pre, self.head
        return self.head

 

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