剑指17 树的子结构

剑指17 树的子结构
一、题目概述

​ 给定两颗二叉树A,B。判断B是不是A的子结构。(空的树不是任何一个树的子结构)

二、思路概述

​ 一个很简单的办法:

​ 遍历A树,找到根节点与B节点相同的节点。

​ 然后用该子树来和B树来判断是否相同。

三、代码
# -*- coding:utf-8 -*-
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

from queue import Queue

class Solution:
    def HasSubtree(self, pRoot1, pRoot2):
        if(pRoot1==None or pRoot2==None):
            return False
        # 广度优先遍历
        queue = Queue(maxsize=0)
        queue.put(pRoot1)

        while(not queue.empty()):
            now = queue.get()
            if(now.val == pRoot2.val):
                if(self.is_same_tree(now,pRoot2)):
                    return True

            left = now.left
            right = now.right

            if left!=None:
                queue.put(left)
            if right!=None:
                queue.put(right)

        return False

    def is_same_tree(self,pRoot1,pRoot2):

        if(pRoot1==None and pRoot2==None):
            return True

        if(pRoot2==None):
            return True

        if(pRoot1==None):
            return False

        if(pRoot1.val == pRoot2.val):
            return self.is_same_tree(pRoot1.left,pRoot2.left) and self.is_same_tree(pRoot1.right,pRoot2.right)

        return False

pRoot1 = TreeNode(8)
pRoot1.left = TreeNode(8)
pRoot1.right = TreeNode(7)
pRoot1.left.left = TreeNode(9)
pRoot1.left.right = TreeNode(2)

pRoot2 = TreeNode(8)
pRoot2.left = TreeNode(9)
pRoot2.right = TreeNode(2)

so = Solution()
res = so.HasSubtree(pRoot1,pRoot2)
print(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值