zoukankan      html  css  js  c++  java
  • 《剑指offer》面试题14:树的子结构(Python)

    题目描述

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

    题目解析

    这个题目很明显可以使用递归来做,我们只需要判断其子数的结构是不是相同的就行了,这里也编写了两个函数。代码如下:

    # -*- 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
         #空树不是任何一个树的子结构,不符合定义,直接返回Fasle
    if pRoot1 == None or pRoot2 == None: return False return self.isSubtree(pRoot1, pRoot2) def isSubtree(self, p1, p2): if p2 == None: return True if p1 == None: return p1 == p2 res = False if p1.val == p2.val:#假设我们输入进来的两棵树是相同的,则来判断是否是相同的,如果是相同的则输出True,相同的树互为子结构 res = self.isSubtree(p1.left, p2.left) and self.isSubtree(p1.right, p2.right)
        #如果输入进来的两颗树是不相同的,那么大树的左子树和右子树其中有一个为p2树所在的树则返回为真
    return res or self.isSubtree(p1.left, p2) or self.isSubtree(p1.right, p2)

     解法二:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
            #空树不是任意树的子结构,因此返回False
            if A == None or B == None:
                return False
            #两棵树是完全相同的,则互为子结构
            return self.dfs(A,B) or self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B)
        
        #利用dfs()函数来判断两棵树是否是相同
        def dfs(self, A: TreeNode, B: TreeNode) -> bool:
            #为啥B树都啥也没了,还能够和A一样?返回True?
            if B == None:
                return True
            if A == None:
                return False
            return A.val == B.val and self.dfs(A.left,B.left) and self.dfs(A.right,B.right)
  • 相关阅读:
    Python从入门到精通系列文章总目录
    使用465端口加密发邮件
    kubernetes学习14—Dashboard搭建和认证
    kubernetes学习01—kubernetes介绍
    CSS基础
    SVN 命令行的使用
    Python判断字符集
    Flask框架(2)-JinJa2模板
    搭建ntp服务器
    Ansible的Playbook的编写
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13567325.html
Copyright © 2011-2022 走看看