1. 程式人生 > 程式設計 >Python對稱的二叉樹多種思路實現方法

Python對稱的二叉樹多種思路實現方法

對稱二叉樹的含義非常容易理解,左右子樹關於根節點對稱,具體來講,對於一顆對稱二叉樹的每一顆子樹,以穿過根節點的直線為對稱軸,左邊子樹的左節點=右邊子樹的右節點,左邊子樹的右節點=左邊子樹的左節點。所以對稱二叉樹的定義是針對一棵樹,而判斷的操作是針對節點,這時可以採取由上到下的順序,從根節點依次向下判斷,只需要重複呼叫函式,不需要回溯。

題目:對稱的二叉樹題:

請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的

解題思路一:先遍歷右子節點再遍歷左子節點。注意,我們必須把遍歷二叉樹時遇到的空指標考慮進來。

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

到此這篇關於Python對稱的二叉樹多種思路實現方法的文章就介紹到這了,更多相關Python對稱的二叉樹內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!