zoukankan      html  css  js  c++  java
  • 牛客网 剑指Offer JZ17 树的子结构

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

    输入:

    {8,8,#,9,#,2,#,5},{8,9,#,2}

    返回值:
    true

    1.先遍历树pRoot1,如果遍历到和pRoot2节点值相同的节点,进入isSubTree方法判断接下来的节点是否都相同
    2.节点都相同返回True;不相同返回False,并且继续遍历树pRoot1找下一个相同的节点
    3.如果遍历完了pRoot1还没有返回过True,说明pRoot2不是pRoot1的子结构,返回False
    isSubTree方法:用于判断从pRoot1的子树是否有和pRoot2相同的部分
    1.采用递归的思想,如果节点root1与root2的节点不同,则说明pRoot1的子树与pRoot2不具有相同的节点
    2.如果值相同,则递归判断(isSubTree)他们各自得左右节点的值是不是相同
    3.递归的终止条件时到达pRoot1或pRoot2的叶节点
     
    class Solution:
        def dfs(self,a,b):
            if not b: return True
            elif not a: return False
            elif a.val != b.val: return False
            return self.dfs(a.left, b.left) and self.dfs(a.right,b.right)
        def HasSubtree(self, pRoot1, pRoot2):
            if not pRoot1 or not pRoot2:
                return False
            return self.dfs(pRoot1,pRoot2) or 
            self.HasSubtree(pRoot1.left, pRoot2) or 
            self.HasSubtree(pRoot1.right, pRoot2)
             
  • 相关阅读:
    Handler使用总结(转)
    LR连接oracle数据库-lr_db_connect
    selenium2(WebDriver)环境搭建
    使用selenium控制滚动条(非整屏body)
    selenium-打开IE浏览器遇到问题记录
    使用re-sign.jar对apk进行重签名
    Robotium-无源码测试
    genymotion不能联网
    SQL 常用脚本
    todolist
  • 原文地址:https://www.cnblogs.com/upstart/p/15222581.html
Copyright © 2011-2022 走看看