本文共 1289 字,大约阅读时间需要 4 分钟。
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def HasSubtree(self, pRoot1, pRoot2): def helper(root1, root2): # 如果root2已经遍历完了,说明root2的每一个节点都能在pRoot1找到对应的节点 if not root2: return True # 如果pRoot1遍历完而pRoot2还没遍历完,说明这root1不是对应的子树根节点 if not root1: return False # 如果遍历过程中存在值不相等的节点,说明不是要找的子树 if root1.val != root2.val: return False # 如果当前节点的值相同,那么继续遍历剩下的节点 return (helper(root1.left, root2.left) and helper(root1.right, root2.right)) # 由于题目规定,空树不是子结构,所以特殊处理这种情况 if not pRoot2 or not pRoot1: return False res = False # 首先找到pRoot1中与pRoot2的根节点的值相同的节点root1, # 然后按照与pRoot2相同的顺序去遍历找到的root1,如果以root1为根节点的子树和pRoot2一样 # 那么说明在pRoot1中找到了跟pRoot2一样的子树。 if pRoot1.val == pRoot2.val: res = helper(pRoot1, pRoot2) if not res: # 递归遍历pRoot1,直到找到一个子树或者遍历完整棵树 res = self.HasSubtree(pRoot1.left, pRoot2) \ or self.HasSubtree(pRoot1.right, pRoot2) return res
转载于:https://blog.51cto.com/jayce1111/2383769