劍指 JZ18二叉樹的映象

2021-10-08 22:41:02 字數 962 閱讀 4964

題目描述

操作給定的二叉樹,將其變換為源二叉樹的映象。

二叉樹的映象定義:源二叉樹 

8/ \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8/ \

10 6

/ \ / \

11 9 7 5

解題思路

遞迴

首先拿到這道題,因為他是要在樹的結構上做改動,而不是輸出乙個映象序列,因此需要遞迴對樹進行改變。首先從根節點開始,將根節點的左孩子和右孩子替換,對於上述例子,僅對8的左右孩子交換後得到:

8

/ \

10 6

/ \ / \

9 11 5 7

然後再遞迴的對左右子節點進行操作,這裡為10和6,所以**就很明確了。

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution:

def mirror(self, root):

if root is none or (root.left is none and root.right is none):

return root

temp = root.left

root.left = root.right

root.right = temp

if root.left:

self.mirror(root.left)

if root.right:

self.mirror(root.right)

return root

劍指Offer 18 二叉樹的映象

操作給定的二叉樹,將其變換為源二叉樹的映象。思路 這道題用遞迴做最合適不過,其思路很簡單,既然是遞迴那函式的開始一定有跳出遞迴的條件,條件就是當遍歷到樹節點為空時,就跳出遞迴。剩下的就是交換根節點左右子節點了,在交換完畢之後要進入到子節點的子樹中對子樹再進行左右節點的交換,如此迴圈下去,如下 sol...

劍指offer item18 二叉樹的映象

輸入乙個二叉樹,輸出其二叉樹的映象。注 映象為二叉樹的所有左右節點交換。二叉樹的映象這種題目在面試中經常會被考到,劃重點啦!這種題目經典的思路有兩種。其一是傳統遞迴 第二種就是非遞迴解法。遞迴法沒有什麼太好說的,既然是左右兩個節點交換,那麼就是所見即所得,利用遞迴實現交換就完事兒了。見下 publi...

劍指Offer 18 二叉樹的映象

請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象 先在樹中交換根節點的兩個子結點,之後需要交換著兩個結點的左右子結點。先前序遍歷這棵樹的每個結點,如果遍歷到的結點有子結點,就交換它的兩個子結點。當交換完所有非葉子結點的左右子結點之後,就得到了樹的映象。coding utf 8 class tree...