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

    结束!

  • 相关阅读:
    团队第二次冲刺10(6.03)
    购买图书问题
    找水王02
    学习进度13
    团队第二次冲刺09(6.02)
    团队第二次冲刺08(6.01)
    C++通过Swig跨线程回调Python代码
    Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法
    Windows系统Python直接调用C++ DLL
    Windows10系统Python2.7通过Swig调用C++过程
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13746001.html
Copyright © 2011-2022 走看看