力扣刷題筆記:劍指 Offer 27. 二叉樹的映象(利用臨時列表遍歷樹的所有節點 node ,並交換每個 node 的左 / 右子節點。)
阿新 • • 發佈:2021-02-11
題目:
劍指 Offer 27、二叉樹的映象
請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。
例如輸入:
映象輸出:
示例 1:
輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]
限制:
0 <= 節點個數 <= 1000
題解思路:
利用棧(或佇列)遍歷樹的所有節點 node ,並交換每個 node 的左 / 右子節點。
演算法流程:
特例處理: 當 root 為空時,直接返回 null;
初始化: 棧(或佇列),本文用棧,並加入根節點 root 。
迴圈交換: 當棧 stack 為空時跳出;
新增子節點: 將 node 左和右子節點入棧;
交換: 交換 node 的左 / 右子節點。
返回值: 返回根節點 root 。
複雜度分析:
時間複雜度 O(N) : 其中 N 為二叉樹的節點數量,建立二叉樹映象需要遍歷樹的所有節點,佔用 O(N) 時間。
空間複雜度 O(N) : 最差情況下(當為滿二叉樹時),棧 stack 最多同時儲存 N/2 個節點,佔用 O(N) 額外空間。
題解python程式碼:
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root:
return
s = [root]
while s:
node = s.pop()
if node.left:
s.append(node.left)
if node.right:
s.append(node.right)
node.left, node.right = node.right, node.left
return root
作者:jyd
連結:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/mian-shi-ti-27-er-cha-shu-de-jing-xiang-di-gui-fu-/
來源:力扣(LeetCode)https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/