zoukankan      html  css  js  c++  java
  • 二叉树的子结构

    剑指offer 牛客网 二叉树的子结构

    # -*- coding: utf-8 -*-
    """
    Created on Mon Apr  8 16:13:20 2019
    
    @author: Administrator
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    
    思路:分两步
    step1:两个头结点对比
    step2:分别匹配左右子节点,采用递归的方式
    """
    
    # -*- 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 == None or pRoot2 == None:    
                return False
            return self.issubtree(pRoot1,pRoot2)
        def issubtree(self,p1,p2):
            if p2 == None:  #如果p2为空了说明p2全部匹配上了,所以返回是子结构
                return True
            if p1 == None:  
                return p1 == p2     #???
            res = False
            if p1.val == p2.val:    #第一步,即比较两个头结点是否相等
                #头结点相等的情况下,递归匹配其左右子节点
                res = self.issubtree(p1.left,p2.left) and self.issubtree(p1.right,p2.right)
            #分别从左右子节点开始调用,去匹配
            return res or self.issubtree(p1.left,p2) or self.issubtree(p1.right,p2)
            
    if __name__ == '__main__':
        solution = Solution()
        node_left = TreeNode(9)
        node_right = TreeNode(2)
        p_left = TreeNode(8)
        p_left.left = node_left
        p_left.right = node_right
        
        node_left = TreeNode(6)
        node_right = TreeNode(5)
        p_right = TreeNode(7)
        p_right.left = node_left
        p_right.right = node_right
        
        p1 = TreeNode(8)
        p1.left = p_left
        p1.right = p_right
        
        
        node_left = TreeNode(9)
        node_right = TreeNode(2)
        p2 = TreeNode(8)
        p2.left = node_left
        p2.right = node_right
        
        res = solution.HasSubtree(p1,p2)
        print(res)
  • 相关阅读:
    项目中常用的图片处理方案小结
    Unity2D实现人物三连击
    使用mescroll实现上拉加载与下拉刷新
    iOS中文输入法多次触发的问题及解决方案
    使用WebStorm将项目部署到IIS
    在Less中使用条件判断
    Vue+原生App混合开发手记#1
    在Vue中使用layer.js弹出层插件
    局域网简单的SVN服务器的搭建
    在iOS中实现sticky header
  • 原文地址:https://www.cnblogs.com/missidiot/p/10671890.html
Copyright © 2011-2022 走看看