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

    题目描述

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

    解答

    先判断A、B是否为空,有一个为空,就返回False(ps:我们约定空树不是任意一个树的子结构)。

    在A、B都不为空的情况下:

    1、判断B的根是否在A里面,如果A的根等于B的跟,那么分别在A的左右孩子里面找等于B的根的节点。

    2,在A的节点内,没有找到等于B的根的节点,返回False。

    3,在A的节点内存在等于B的根的节点。

    4,剩下就是递归。

    # coding:utf-8
    
    class ListNode:
        def __init__(self,x, left=None, right=None):
            self.val = x
            self.left = left
            self.right = right
    
    class Solution:
        def HasSubtree(self, pRoot1, pRoot2):
            # write code here
            flag = False
            if pRoot1 and pRoot2:
                if pRoot1.val == pRoot2.val:
                    flag = self.same(pRoot1, pRoot2)
                if not flag:
                    flag = self.HasSubtree(pRoot1.left, pRoot2)
                if not flag:
                    flag = self.HasSubtree(pRoot1.right, pRoot2)
            return flag
    
    
        def same(self, p1, p2):
            if not p2:
                return True
            if not p1:
                return False
            return p1.val == p2.val and self.same(p1.left, p2.left) and self.same(p1.right, p2.right)
    
    a = ListNode('a')
    b = ListNode('b')
    c = ListNode('c')
    d = ListNode('d')
    f = ListNode('a')
    e = ListNode('e')
    
    f.left = b
    a.left = b
    b.left = c
    c.left = d
    f.right = e
    
    ret = Solution().HasSubtree(a,f)
    print ret

    结束!

  • 相关阅读:
    服务端跳转和客户端跳转的区别
    jsp:include标签与include指令的区别
    jsp错误页不跳转显示500
    使用Cookie进行会话管理
    深入理解重定向和转发
    appium环境搭建(二)----搭建android开发环境
    appium环境搭建(一)----安装appium
    Fiddler实现移动端手机抓包
    黑盒测试人员必备技能
    SVN服务器搭建
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13746001.html
Copyright © 2011-2022 走看看