1. 程式人生 > 其它 >力扣刷題筆記:劍指 Offer 27. 二叉樹的映象(利用臨時列表遍歷樹的所有節點 node ,並交換每個 node 的左 / 右子節點。)

力扣刷題筆記:劍指 Offer 27. 二叉樹的映象(利用臨時列表遍歷樹的所有節點 node ,並交換每個 node 的左 / 右子節點。)

技術標籤:刷題筆記leetcodepython

題目:

劍指 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 左和右子節點入棧;
交換: 交換 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/