力扣題解 劍指 Offer 27 二叉樹的映象

2021-10-08 09:56:19 字數 2014 閱讀 9159

請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。

例如輸入:

4/   \

2     7

/ \   / \

1   3 6   9

映象輸出:

4/   \

7     2

/ \   / \

9   6 3   1

示例 1:

輸入:root = [4,2,7,1,3,6,9]

輸出:[4,7,2,9,6,3,1]

限制:0 <= 節點個數 <= 1000

題解:二叉樹映象定義: 對於二叉樹中任意節點 root ,設其左 / 右子節點分別為 left, right;則在二叉樹的映象中的對應 root 節點,其左 / 右子節點分別為 right, left。 

方法一:遞迴法

根據二叉樹映象的定義,考慮遞迴遍歷(dfs)二叉樹,交換每個節點的左 / 右子節點,即可生成二叉樹的映象。

遞迴解析:

終止條件: 當節點 rootroot 為空時(即越過葉節點),則返回 nullnull ;

遞推工作:

初始化節點 tmptmp ,用於暫存 rootroot 的左子節點;

開啟遞迴 右子節點 mirrortree(root.right)mirrortree(root.right) ,並將返回值作為 rootroot 的 左子節點 。

開啟遞迴 左子節點 mirrortree(tmp)mirrortree(tmp) ,並將返回值作為 rootroot 的 右子節點 。

返回值: 返回當前節點 rootroot ;

q: 為何需要暫存 rootroot 的左子節點?

a: 在遞迴右子節點 「root.left = mirrortree(root.right);root.left=mirrortree(root.right);」 執行完畢後, root.leftroot.left 的值已經發生改變,此時遞迴左子節點 mirrortree(root.left)mirrortree(root.left) 則會出問題。

class solution 

}

複雜度分析:

時間複雜度 o(n)o(n) : 其中 nn 為二叉樹的節點數量,建立二叉樹映象需要遍歷樹的所有節點,占用 o(n)o(n) 時間。

空間複雜度 o(n)o(n) : 最差情況下(當二叉樹退化為鍊錶),遞迴時系統需使用 o(n)o(n) 大小的棧空間。

**:python 利用平行賦值的寫法(即 a, b = b, aa,b=b,a ),可省略暫存操作。其原理是先將等號右側打包成元組 (b,a)(b,a) ,再序列地分給等號左側的 a, ba,b 序列。

方法二:輔助棧(或佇列)

利用棧(或佇列)遍歷樹的所有節點 nodenode ,並交換每個 nodenode 的左 / 右子節點。

演算法流程:

特例處理: 當 rootroot 為空時,直接返回 nullnull ;

初始化: 棧(或佇列),本文用棧,並加入根節點 rootroot 。

迴圈交換: 當棧 stackstack 為空時跳出;

出棧: 記為 nodenode ;

新增子節點: 將 nodenode 左和右子節點入棧;

交換: 交換 nodenode 的左 / 右子節點。

返回值: 返回根節點 rootroot 。

複雜度分析:

時間複雜度 o(n)o(n) : 其中 nn 為二叉樹的節點數量,建立二叉樹映象需要遍歷樹的所有節點,占用 o(n)o(n) 時間。

空間複雜度 o(n)o(n) : 最差情況下(當為滿二叉樹時),棧 stackstack 最多同時儲存 n/2n/2 個節點,占用 o(n)o(n) 額外空間。

class solution };

while(!stack.isempty())

return root;}}

力扣 劍指 Offer 27 二叉樹的映象 簡單

請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。例如輸入 4 2 7 1 3 6 9 映象輸出 4 7 2 9 6 3 1 示例 1 輸入 root 4,2,7,1,3,6,9 輸出 4,7,2,9,6,3,1 1.遞迴法,自下而上 遞推解析 a.當節點root為空,則返回null b.遞迴,r...

力扣刷題 劍指 Offer 27 二叉樹的映象

請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。例如輸入 4 2 7 1 3 6 9 映象輸出 4 7 2 9 6 3 1示例 1 輸入 root 4,2,7,1,3,6,9 輸出 4,7,2,9,6,3,1 這道題目需遍歷完二叉樹,每遍歷到乙個節點就交換它的左右節點,當遍歷完成以後就實現了整個...

劍指offer 27 二叉樹的映象

宣告 本系列部落格是對何海濤 劍指offer 的關鍵點總結。1.樹的映象 定義 樹的根結點相同,但是左右兩個子節點交換了位置 2.解題思路 1 前序遍歷樹的每乙個結點 2 如果遍歷到的節點有子節點,則交換其左右兩個子節點 3 分別以左子節點和右子節點作為新的根結點,遞迴呼叫該函式 4 當遍歷到的結點...