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


    本题是leetcode,地址:572. 另一个树的子树

    题目

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

    示例 1:
    给定的树 s:

    示例 1:
    给定的树 s:
    3
    /
    4 5
    /
    1 2
    给定的树 t:

    4
    /
    1 2
    返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。

    示例 2:
    给定的树 s:
    3
    /
    4 5
    /
    1 2
    /
    0
    给定的树 t:

    4
    /
    1 2
    返回 false。

    分析

    首先想一个问题,如果判断两个书是否相等?递归调用比较每一个节点的数值;

    code如下

        public boolean isSameTree(TreeNode s, TreeNode t){
            // 如果两个节点都为空,可以认为相同
            if(s == null && t == null) return true;
            // 如果两个节点一个相同 其中一个是null,肯定不同
            if(s == null || t == null) return false;
            // 如果两个节点的数值不同,则也不同
            if(s.val != t.val) return false;
            // 递归就完了
            return isSameTree(s.left,t.left) && isSameTree(s.right,t.right);
        }
    

    如果有了比较两个树是否相同的判断函数,那么暴力解法就是枚举第一棵树的子树,就是深度遍历;

    code如下:

       public boolean dfs(TreeNode s, TreeNode t) {
            if(t == null) return true;
            if(s == null) return false;
            return dfs(s.left,t) || dfs(s.right,t);
        }
    

    如此一来,我们就可以写出完整代码:

    code

        public boolean isSubtree(TreeNode s, TreeNode t) {
           return dfs(s,t);
        }
    
        public boolean dfs(TreeNode s, TreeNode t) {
            if(t == null) return true;
            if(s == null) return false;
            return dfs(s.left,t) || dfs(s.right,t) || isSameTree(s,t);
        }
    
        public boolean isSameTree(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 isSameTree(s.left,t.left) && isSameTree(s.right,t.right);
        }
    

    你的鼓励也是我创作的动力

    打赏地址

  • 相关阅读:
    colormap
    tensorflow4
    tensorflow3
    attention 机制
    tensorflow2
    Android 再谈handler
    Android表格布局之设置边框
    Android AsyncTask异步加载WebAPI
    Android JPush极光推送应用
    Android规划周期任务
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13340167.html
Copyright © 2011-2022 走看看