zoukankan      html  css  js  c++  java
  • 572. 另一个树的子树

     

    题目要求判断一棵树是否包含另一棵树,广度优先遍历由于需要维护一个队列,

    这个队列会依次把每一层的节点全部压入队列,在本题中本层的其他节点会造成干扰项,

    所以我们使用深度优先

    方法一:深度优先遍历暴力破解

    class Solution { 
        public boolean isSubtree(TreeNode s, TreeNode t) {
            if (t==null) return true;
            if (s==null) return false;
            // 一棵树的子树包括3种可能,(1)左子树的子树(2)右子树的子树(3)自身  (每一棵树都是其自身的子树)
            return isSubtree(s.left,t) || isSubtree(s.right,t) || isSameTree(s,t);  
        }
    
        public boolean isSameTree(TreeNode s, TreeNode t) {
            if (s==null && t==null) return true;
            // s和t不全为空,但有一个为空,必然不相等
            if (s==null || t==null) return false; 
             // 此处判断2颗树是否相似,条件为左右子树都完全保持一致
             if (s.val!=t.val) return false;
            return isSameTree(s.left,t.left) && isSameTree(s.right,t.right);
        }
    }

    方法二:深度优先+KMP

    我们使用深度优先遍历可以得到一个遍历序列,代表一棵树的遍历顺序,

    假设s包含t,那么s的遍历序列种必然存在和t一样的字串,看到字串,我们

    就想到了kmp,于是我们可以先使用DFS得到2个字符串,再使用KMP来

    判断是否s是否包含字串t

    (由于KMP的代码我给忘了,后面再补)

    争取早日不再是一只菜鸡
  • 相关阅读:
    mysql递归层次查询
    mybatis+spring事务
    浅谈数据库表的分割技术(水平、垂直、库表散列)(引用)
    高并发的常见思维
    jee websocket搭建总结
    hibernate 多表查询
    jsp作为服务端,ajax请求回应
    排序(2)--希尔,快速,归并
    排序(1)--冒泡,插入,选择
    Java反射基础
  • 原文地址:https://www.cnblogs.com/jchen104/p/14656672.html
Copyright © 2011-2022 走看看