含有兩道題,都從樹的遞迴入手
請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。
解題思路:
映象翻**只需要遍歷二叉樹,每次訪問乙個結點時,交換其左右子樹。
**實現:
# 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...