leetcode-100 相同的樹

給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。

示例 1:

輸入:       1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

輸出: true

示例 2:

輸入:      1          1
          /           \
         2             2

        [1,2],     [1,null,2]

輸出: false

示例 3:

輸入:       1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

輸出: false


思路一:遍歷兩個樹後將結果存入列表中,然後比較兩個列表是否相同。

代碼:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """        
        pnodes=[]
        qnodes=[]
        self.edgoictree(p,pnodes)
        self.edgoictree(q,qnodes)
        
        while len(pnodes)>0 and len(qnodes)>0 :
            if pnodes.pop()!=qnodes.pop() :
                return False
            
            if len(pnodes)==0 and len(qnodes)==0:
                return True
        else:
            return False         
        
    def edgoictree(self,binetree,pre_order_nodes):
        if binetree is None:
            pre_order_nodes.append('null')   #注意空值要加入null
            return 
        
        pre_order_nodes.append(binetree.val)
        self.edgoictree(binetree.left,pre_order_nodes)
        self.edgoictree(binetree.right,pre_order_nodes)


思路二:同時遍歷兩個樹,遞歸完後立即比較。

# Definition for a binary tree node.  
# class TreeNode:  
#     def __init__(self, x):  
#         self.val = x  
#         self.left = None  
#         self.right = None  
  
  
class Solution:  
    def isSameTree(self, p, q):  
        """ 
        :type p: TreeNode 
        :type q: TreeNode 
        :rtype: bool 
        """  
        if not p and not q:   #兩二叉樹皆爲空,遞歸邊界,兩者皆爲空返回真  
            return True  
        if p and q and p.val==q.val:  
            l=self.isSameTree(p.left,q.left)  #遞歸,每次重新從函數入口處進行,每次進行遞歸邊界判斷  
            r=self.isSameTree(p.right,q.right)  
            return l and r     #and操作,需要l與r皆爲true時,才返回真。只用最後一次遞歸邊界return值  
        else:  
            return False  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章