Python對(duì)稱的二叉樹(shù)多種思路實(shí)現(xiàn)方法
對(duì)稱二叉樹(shù)的含義非常容易理解,左右子樹(shù)關(guān)于根節(jié)點(diǎn)對(duì)稱,具體來(lái)講,對(duì)于一顆對(duì)稱二叉樹(shù)的每一顆子樹(shù),以穿過(guò)根節(jié)點(diǎn)的直線為對(duì)稱軸,左邊子樹(shù)的左節(jié)點(diǎn)=右邊子樹(shù)的右節(jié)點(diǎn),左邊子樹(shù)的右節(jié)點(diǎn)=左邊子樹(shù)的左節(jié)點(diǎn)。所以對(duì)稱二叉樹(shù)的定義是針對(duì)一棵樹(shù),而判斷的操作是針對(duì)節(jié)點(diǎn),這時(shí)可以采取由上到下的順序,從根節(jié)點(diǎn)依次向下判斷,只需要重復(fù)調(diào)用函數(shù),不需要回溯。
題目:對(duì)稱的二叉樹(shù)題:
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),用來(lái)判斷一顆二叉樹(shù)是不是對(duì)稱的。注意,如果一個(gè)二叉樹(shù)同此二叉樹(shù)的鏡像是同樣的,定義其為對(duì)稱的
解題思路一:先遍歷右子節(jié)點(diǎn)再遍歷左子節(jié)點(diǎn)。注意,我們必須把遍歷二叉樹(shù)時(shí)遇到的空指針考慮進(jìn)來(lái)。
class Solution: def isSymmetrical(self, pRoot): # write code here return self.isSymmetricalCore(pRoot,pRoot) def isSymmetricalCore(self,pRoot1,pRoot2): if not pRoot1 and not pRoot2: return True if not pRoot1 or not pRoot2: return False if pRoot1.val != pRoot2.val: return False return self.isSymmetricalCore(pRoot1.left,pRoot2.right) and self.isSymmetricalCore(pRoot1.right,pRoot2.left)
解題思路二:迭代
def isSymmetric(self, root: ’TreeNode’) -> ’bool’: stack = root and [(root.left, root.right)] while stack: p1, p2 = stack.pop() if not p1 and not p2: continue if not p1 or not p2: return False if p1.val != p2.val: return False stack.append((p1.left, p2.right)) stack.append((p1.right, p2.left)) return True
到此這篇關(guān)于Python對(duì)稱的二叉樹(shù)多種思路實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Python對(duì)稱的二叉樹(shù)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)2. 基于PHP做個(gè)圖片防盜鏈3. jscript與vbscript 操作XML元素屬性的代碼4. Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件列表展示(二)5. XML在語(yǔ)音合成中的應(yīng)用6. Jsp servlet驗(yàn)證碼工具類分享7. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫(xiě)金額)的函數(shù)8. asp.net core 認(rèn)證和授權(quán)實(shí)例詳解9. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)車(chē)輛管理系統(tǒng)10. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)
