题解 | #树的子结构#
树的子结构
http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def sameTree(self, a, b):
if a == None and b != None:
return False
if b == None:
return True
# print("2:",a.val, b.val)
ret = a.val == b.val and self.sameTree(a.left, b.left) and self.sameTree(a.right,b.right)
# print("2:",a.val, b.val, "ret:", ret)
return ret
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if not pRoot1 or not pRoot2:
return False
ret = False
if pRoot1.val == pRoot2.val:
# print("1:", pRoot1.val, pRoot2.val)
ret = self.sameTree(pRoot1, pRoot2)
if ret == False:
ret = self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
else:
return True
else:
ret = self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
return ret
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def sameTree(self, a, b):
if a == None and b != None:
return False
if b == None:
return True
# print("2:",a.val, b.val)
ret = a.val == b.val and self.sameTree(a.left, b.left) and self.sameTree(a.right,b.right)
# print("2:",a.val, b.val, "ret:", ret)
return ret
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if not pRoot1 or not pRoot2:
return False
ret = False
if pRoot1.val == pRoot2.val:
# print("1:", pRoot1.val, pRoot2.val)
ret = self.sameTree(pRoot1, pRoot2)
if ret == False:
ret = self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
else:
return True
else:
ret = self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
return ret