劍指Offer 27 二叉樹的映象

2021-10-12 03:50:08 字數 1100 閱讀 1289

利用棧或者佇列實現

將根節點入隊,再出隊,將該結點的左右子樹入隊,交換該結點的左右子樹,再將佇列中的結點出隊,交換該結點的左右子樹,重複此步驟,直到隊列為空。返回根節點。

利用遞迴實現:遞迴解析:

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

遞推工作:

初始化節點 tmp,用於暫存 root的左子節點;

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

開啟遞迴 左子節點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) 則會出問題。

劍指offer 27 二叉樹的映象

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

劍指Offer 27 二叉樹的映象

請完成乙個函式,輸入一棵二叉樹,該函式輸出它的映象。例 8 8 6 10 10 6 5 7 9 11 11 9 7 5交換左右子樹,遍歷至葉節點終止即可。時間複雜度 o n 空間複雜度 o 1 def mirror of binary tree root param root root return...

劍指offer 27 二叉樹的映象

思路 先前序遍歷這顆樹的每個節點,如果遍歷到的節點有子節點,就交換它的兩個子節點。當交換完所有非葉節點的左右節點之後就得到了樹的映象。class treenode def init self,x self.val x self.left none self.right none class solu...