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  


猜你喜欢

转载自blog.csdn.net/u012474535/article/details/80244295
今日推荐