为什么80%的码农都做不了架构师?>>>

问题:

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

Example 1:
Given tree s:

     3/ \4   5/ \1   2

Given tree t:

   4 / \1   2

Return true, because t has the same structure and node values with a subtree of s.

Example 2:
Given tree s:

     3/ \4   5/ \1   2/0

Given tree t:

   4/ \1   2

Return false.

解决:

① 给定两个树s和t,判断t是否是s的一个子树。这里s的子树是指,一个树由s中的一个节点及其所有子节点组成,s也可以是自己本身的一个子树。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution { //28ms
    public boolean isSubtree(TreeNode s, TreeNode t) {
        if(t == null) return true;
        if(s == null) return false;
        if(isSame(s,t)) return true;
        return isSubtree(s.left,t) || isSubtree(s.right,t);
    }
    public boolean isSame(TreeNode s,TreeNode t){
        if(s == null && t == null) return true;
        if(s == null || t == null) return false;
        if(s.val != t.val) return false;
        return isSame(s.left,t.left) && isSame(s.right,t.right);
    }
}

② 在discuss中看到以下解法

public class Solution { // 16ms
    public boolean isSubtree(TreeNode s, TreeNode t) {
        return isSubtree(s, t, true);
    }
    private boolean isSubtree(TreeNode s, TreeNode t, boolean isHead) {
        if (s == null && t == null) return true;
        if (s == null || t == null || (s.val != t.val && !isHead)) return false; //isHead表示是否以当前节点为根节点比较子树的
        if (s.val == t.val) {
            boolean left = isSubtree(s.left, t.left, false);
            boolean right = isSubtree(s.right, t.right, false);
            if (left && right) {
                return true;
            } else {
                left = isSubtree(s.left, t, true);
                right = isSubtree(s.right, t, true);
                return left || right;
            }
        } else {
            boolean left = isSubtree(s.left, t, true);
            boolean right = isSubtree(s.right, t, true);
            return left || right;
        }
    }
}

转载于:https://my.oschina.net/liyurong/blog/1506813

判断是否为一棵树的子树 Subtree of Another Tree相关推荐

  1. 判断一棵树是否是另一棵树的子树(Java实现)

    前面一篇文章介绍了如何判断两棵树相等,思路就是遍历每个节点,然后判断是否均相等,需要用递归来实现.如果需要判断一棵树是另一棵树的子树,该怎么办呢?我们需要借助前面的思路,需要先判断两棵树相等,这里就是 ...

  2. 判断一棵树是否为另一棵树的子树

    题目如下: 判断一棵树是否为另一棵树的子树 思路: (1)先构建两棵树,a树和b树,判断b树是否为a树的子树 (2)构建两个方法,一个用来判断传入的两棵树是否相同,为isSameTree:另一个用来判 ...

  3. 二叉树 判断一棵树是否是另一棵树的子树

    题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 ...

  4. 判断一棵树是否是另一棵树的子树 java实现

    这是一个很经典的算法题,听起来好像挺难的,但是其实很简单.我觉得我们接触到的问题,并没有难题,只有复杂不复杂.一个再难的问题,也可以分解成一个个简单的问题,再将这些简单的问题交给不同的人去做就构成了一 ...

  5. 判断两个树是否相同判断一棵树是否是一棵树的子树

    判断两棵树是否相同 方法:对两棵树同时做相同的递归判断其值或者是结构是否相同. 以下代码用的是前序遍历.递归方法(毕竟递归好理解而且代码少得可怜). 比较啰嗦的是指针为空的情况,只要把这些情况单独列出 ...

  6. 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)

    一.相同的树 这道题是开胃菜的开始,使用递归进行解决 递归三部曲: 确定递归函数的参数和返回值 因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否 ...

  7. LeetCode Algorithm 572. 另一棵树的子树

    572. 另一棵树的子树 Ideas 首先想到的就是递归判断两棵树的每一个节点是否相等,那么就需要将subRoot跟root的每一个节点构成的子树判断是否相同. 递归判断相等的逻辑比较简单,首先当前两 ...

  8. 另一棵树的子树(LeetCode)

    给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false . 二叉树 tree 的一 ...

  9. 572. 另一棵树的子树————简单

    目录 题目 解题思路 Code 运行结果 题目 572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果 ...

  10. LeetCode另一棵树的子树

    572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false  ...

最新文章

  1. 兵器工业计算机应用研究所刘培志,一种双目视觉立体匹配算法_2
  2. 使用Nginx自带的Realip模块获取用户真实IP
  3. diff 比较两个文件的差异
  4. Clojure:导入lein项目到IntelliJ IDEA
  5. javaweb入门--web是什么
  6. 会议通知|2019年全国高校大数据专业教学研讨与教师培训
  7. postgresql mysql数据类型_PostgreSQL和mysql数据类型对比兼容
  8. 目标检测(二十一)--FCN
  9. Python手册(Machine Learning)--statsmodels(TimeSeries)
  10. VBlog 纯前端博客 2018.5.15更新
  11. urllib.request.urlopen()出现的程序超时假死问题
  12. 多元线性回归及虚拟变量(哑变量)设置
  13. gas费用测试优化:hardhat-gas-reporter
  14. 什么是信贷风险控制?
  15. CSDN - CSDN27题解
  16. 如何理解PoW工作量证明?
  17. 关于大商创安装默认数据清空说明
  18. Stduino学习(二十六)水位传感器模块
  19. c语言程序怎么记忆,c语言的记忆方法指导
  20. 基于单片机的温控风扇

热门文章

  1. Java8 中的真的 Optional 很强大,你用对了吗?
  2. 国内外优秀音视频博客索引(持续更新)
  3. asp和php漏洞,ASP_实例分析ASP上传漏洞入侵实战及扩展,【上传漏洞欺骗技术】 - phpStudy...
  4. python魔法属性_python魔法方法-属性转换和类的表示详解
  5. cmw500综合测试仪使用_辽宁优质继电器综合测试仪供应商-广州炫通电气科技
  6. cmd怎么导入mysql文件,使用cmd工具如何导入大容量sql文件到mysql数据库
  7. 英特尔核显驱动hd630_英特尔发新处理器,换新 Logo,还把 AMD 吊打了一轮
  8. 安装Spark集群(在CentOS上)
  9. Scala For Java的一些参考
  10. [Mongodb]安装与启动