114. Flatten Binary Tree to Linked List 二叉树展开为链表
生活随笔
收集整理的這篇文章主要介紹了
114. Flatten Binary Tree to Linked List 二叉树展开为链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個二叉樹,原地將它展開為一個單鏈表。
例如,給定二叉樹
1/ \2 5/ \ \ 3 4 6將其展開為:
1\2\3\4\5\6前序遍歷
將二叉樹展開為單鏈表之后,單鏈表中的節點順序即為二叉樹的前序遍歷訪問各節點的順序。因此,可以對二叉樹進行前序遍歷,獲得各節點被訪問到的順序。由于將二叉樹展開為鏈表之后會破壞二叉樹的結構,因此在前序遍歷結束之后更新每個節點的左右子節點的信息,將二叉樹展開為單鏈表。
Code
def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""def preOrderTraversal(root: TreeNode):if root:preOrderList.append(root)preOrderTraversal(root.left)preOrderTraversal(root.right)preOrderList = []preOrderTraversal(root)size = len(preOrderList)for i in range(1, size):prev, curr = preOrderList[i - 1], preOrderList[i]prev.left = Noneprev.right = curr復雜度分析
時間復雜度:O(n),其中 n 是二叉樹的節點數。前序遍歷的時間復雜度是 O(n),前序遍歷之后,需要對每個節點更新左右子節點的信息,時間復雜度也是 O(n)。
空間復雜度:O(n),其中 n 是二叉樹的節點數。空間復雜度取決于棧(遞歸調用棧或者迭代中顯性使用的棧)和存儲前序遍歷結果的列表的大小,棧內的元素個數不會超過 n,前序遍歷列表中的元素個數是 nn。
總結
以上是生活随笔為你收集整理的114. Flatten Binary Tree to Linked List 二叉树展开为链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为何外界常说扎克伯格是机器人?源于201
- 下一篇: 2013\Province_C_C++_