另一棵树的子树(简单难度)

简介: 另一棵树的子树(简单难度)

题目概述(简单难度)

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


二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。


示例 1:

2.png

输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true

示例 2:

2.png

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false

题目链接:

点我进入leetcode


思路与代码

思路展现

这道题目的思路是这样的:

1:判断subRoot和root所在的二叉树本身是不是相同的树,如果是直接返回true即可

2:判断subRoot所在的二叉树是不是root所在的二叉树的左树

3:判断subRoot所在的二叉树是不是root所在的二叉树的右树


代码示例

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null && q != null || p !=null && q == null) {
            return false;
        }
        if(p == null && q == null) {
            return true;
        }
        if(p.val != q.val) {
            return false;
        }
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root ==null || subRoot == null) {
            return false;
        }
        if(isSameTree(root,subRoot)) {
            return true;
        }
        if(isSubtree(root.left,subRoot)) {
            return true;
        }
        if(isSubtree(root.right,subRoot)) {
            return true;
        }
        return false;
    }
}

总结

考察对于二叉树的掌握,也是入门的经典题目

时间复杂度:对于每一个 root 上的点,都需要做一次深度优先搜索来和 subRoot 匹配,假设root有m个节点,subRoot有n个节点,那么时间复杂度为O(m*n),也就是最坏情况下双方都要将二叉树遍历完才可以确认是否为子树.

空间复杂度:假设root的深度为dr,subRoot的深度为ds,任意时刻栈空间的最大使用代价是 O(max {dr, ds}),所以空间复杂度为 O(max {dr, ds}).

相关文章
|
6月前
二叉树基础oj练习(对称二叉树、翻转二叉树、另一棵树的子树二叉树的构建及遍历)
二叉树基础oj练习(对称二叉树、翻转二叉树、另一棵树的子树二叉树的构建及遍历)
41 0
代码随想录Day17 LeetCode T98 验证二叉搜索树 T530 二叉搜索树的最小绝对差 T501 二叉搜索树中的众数 T236二叉搜索树的最近公共祖先
代码随想录Day17 LeetCode T98 验证二叉搜索树 T530 二叉搜索树的最小绝对差 T501 二叉搜索树中的众数 T236二叉搜索树的最近公共祖先
55 0
【Leetcode -965.单值二叉树 -572.另一颗树的子树】
【Leetcode -965.单值二叉树 -572.另一颗树的子树】
31 0
|
机器学习/深度学习 存储 人工智能
代码随想录训练营day21| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先...
代码随想录训练营day21| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先...
《二叉树刷题计划》——相同的树、对称二叉树、另一棵树的子树
《二叉树刷题计划》——相同的树、对称二叉树、另一棵树的子树
leetcode572 另一颗树的子树
leetcode572 另一颗树的子树
61 0
leetcode572 另一颗树的子树
二叉搜索树的最近公共祖先(简单难度)
二叉搜索树的最近公共祖先(简单难度)
76 0
二叉搜索树的最近公共祖先(简单难度)
二叉搜索树的第k大节点(简单难度)
二叉搜索树的第k大节点(简单难度)
74 0
二叉搜索树的第k大节点(简单难度)
|
存储
二叉树的性质
二叉树的性质
143 0
二叉树的性质
|
存储
二叉树的最大深度(简单难度)
二叉树的最大深度(简单难度)
88 0