[剑指Offer]树的子结构

本文首发于我的个人博客Suixin’s Blog
原文: https://suixinblog.cn/2019/03/target-offer-has-subtree.html  作者: Suixin

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

解题思路

创建一个新的IsSubtree函数用来递归调用。如果根节点相同,就递归调用该函数,否则判断B是否为A的左子树或右子树的子结构。
需要注意空树的情况:HasSubtree中任一树为空就返回FalseIsSubtree中需先判断B是否为空,为空表示已经遍历完了,是子结构,A树为空或当前两个根节点不同则返回False,否则递归到左子树和右子树继续判断,两个子树都返回True则返回True

代码

Python(2.7.3)

# -*- 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
        if pRoot1 is None or pRoot2 is None:
            return False
        return self.IsSubtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
    
    def IsSubtree(self, A, B):
        # 这里HasSubtree函数中调用的这个函数B不为None,所以判断条件仅适用于本身的递归调用
        if B is None:
            return True
        if A is None or A.val != B.val:
            return False
        return self.IsSubtree(A.left, B.left) and self.IsSubtree(A.right, B.right)

运行时间:25ms
占用内存:5860k

参考

https://www.nowcoder.com/profile/4462927/codeBookDetail?submissionId=9097366

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 递...
    繁著阅读 2,675评论 0 0
  • 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码: isSu...
    qming_c阅读 2,425评论 0 0
  • 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    zheng7阅读 897评论 0 0
  • 晨读感悟《亲爱的卧底经济学家》蒂姆·哈福德 001要不要办健身卡 就我而言 健身卡是要办的 因为工作时间原因晚上夜...
    不会飞的艳子阅读 962评论 0 0
  • 很有感触 打算阅读要完写读后感 对于自己的启示 我们常常用思维让我们一步步成了井底之蛙 为什么其他人思维那么...
    雅nmmm阅读 2,870评论 0 0