Leetcode 100. Same Tree

思路1: 递归,如果 p = q, 那么判段 sameTree(p.left)==sameTree(q.left) and sameTree(p.right) = sameTree(q.right)

 1 class Solution(object):
 2     def isSameTree(self, p, q):
 3         """
 4         :type p: TreeNode
 5         :type q: TreeNode
 6         :rtype: bool
 7         """
 8         if not p and not q:
 9             return True
10         
11         if p and q:    
12             if p.val == q.val:
13                 return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
14             else:
15                 return False
16         
17         return False

 

思路二: 如果两个树相同,说明按照一定的方式遍历这两个树,应该得到一样的结果。这里用的方法是使用stack来实现先序遍历(pre-order)。注意pre-order遍历时是,root -> root.left -> root.right。所以push进stack的时候应该先push root.right再push root.left。

 1 class Solution(object):
 2     def isSameTree(self, p, q):
 3         """
 4         :type p: TreeNode
 5         :type q: TreeNode
 6         :rtype: bool
 7         """
 8         if p == None and q == None:
 9             return True
10         
11         stack = [(p, q)]
12         
13         while stack:
14             l, r = stack.pop()
15             
16             if l == None and r == None:
17                 continue
18             elif l and r and l.val == r.val:
19 
20                 stack.append((l.right, r.right)) 
21 
22                 stack.append((l.left, r.left))              
23             else:
24                 return False
25         
26         return True

 

转载于:https://www.cnblogs.com/lettuan/p/6349026.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值