劍指Offer 二叉樹 對稱的二叉樹

2021-10-03 12:20:47 字數 2190 閱讀 7558

含有兩道題,都從樹的遞迴入手

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

解題思路:

映象翻**只需要遍歷二叉樹,每次訪問乙個結點時,交換其左右子樹。

**實現:

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

mirrortree

(self, root: treenode)

-> treenode:

#遞迴要素一:終止條件

if root =

none

:return

none

#遞迴要素二:等價條件

node = root

#至下而上的映象交換

right = self.mirrortree(node.right)

left = self.mirrortree(node.left)

node.right = left

node.left = right

return root

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。

例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。

但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:

解題思路:

**實現:

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

issymmetric

(self, root: treenode)

->

bool

:# 如果不存在root沒有二叉樹則輸出true

res =

true

if root:

res = self.helper(root.left, root.right)

return res

defhelper

(self,a,b)

:# 都為空指標則返回 true

# 只有乙個為空則返回 false

# 兩個指標當前節點值不相等 返回false

if a is

none

and b is

none

:return

true

if a is

none

or b is

none

:return

false

if a.val != b.val:

return

false

#以上三個都相當於終止條件,以下為等價關係

return self.helper(a.left,b.right)

and self.helper(a.right,b.left)

劍指offer 對稱的二叉樹

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。思路 複製一顆二叉樹,在該二叉樹的基礎上求得二叉樹的映象,同時遍歷兩顆二叉樹,判斷每乙個節點是否相同。public class solution private treenode copy ...

劍指offer 對稱的二叉樹

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。遞迴 coding utf 8 class treenode def init self,x self.val x self.left none self.right none class ...

劍指offer 對稱的二叉樹

1 題目描述 請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。2 思路 樹a的左節點等於樹b的右結點,樹a的右結點等於樹b的左節點。剛開始根節點便是樹a和樹b的根節點,樹a的根節點是根節點的左節點,樹b的根節點是根節點的右節點,後來,樹a...