题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解答
先判断A、B是否为空,有一个为空,就返回False(ps:我们约定空树不是任意一个树的子结构)。
在A、B都不为空的情况下:
1、判断B的根是否在A里面,如果A的根等于B的跟,那么分别在A的左右孩子里面找等于B的根的节点。
2,在A的节点内,没有找到等于B的根的节点,返回False。
3,在A的节点内存在等于B的根的节点。
4,剩下就是递归。
# coding:utf-8 class ListNode: def __init__(self,x, left=None, right=None): self.val = x self.left = left self.right = right class Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here flag = False if pRoot1 and pRoot2: if pRoot1.val == pRoot2.val: flag = self.same(pRoot1, pRoot2) if not flag: flag = self.HasSubtree(pRoot1.left, pRoot2) if not flag: flag = self.HasSubtree(pRoot1.right, pRoot2) return flag def same(self, p1, p2): if not p2: return True if not p1: return False return p1.val == p2.val and self.same(p1.left, p2.left) and self.same(p1.right, p2.right) a = ListNode('a') b = ListNode('b') c = ListNode('c') d = ListNode('d') f = ListNode('a') e = ListNode('e') f.left = b a.left = b b.left = c c.left = d f.right = e ret = Solution().HasSubtree(a,f) print ret
结束!