面试26题:
题目:树的子结构
题:输入两棵二叉树A和B,判断B是不是A的子结构。
解题思路:递归,注意空指针的情况。
解题代码:
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here res=False if pRoot1 and pRoot2: if pRoot1.val==pRoot2.val: res=self.SubtreeCore(pRoot1,pRoot2) if not res: res=self.HasSubtree(pRoot1.left,pRoot2) if not res: res=self.HasSubtree(pRoot1.right,pRoot2) return res def SubtreeCore(self,pRoot1,pRoot2): if pRoot2==None: return True if pRoot1==None: return False if pRoot1.val!=pRoot2.val: return False return self.SubtreeCore(pRoot1.left,pRoot2.left) and self.SubtreeCore(pRoot1.right,pRoot2.right)
另外,如果树节点的val值是double的时候,需要自定义一个equal函数,当num1和num2相差小于1e-07时即可认为是相等的,详见剑指offer P151