目录
1.题目描述
2.题解
思路分析
具体实现
完整代码
1.题目描述
给你两棵二叉树 root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回 true
;否则,返回 false
。
二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
示例:
输入:root = [3, 4, 5, 1, 2],subRoot = [4, 1, 2]
输出:true
2.题解
思路分析
我们首先判断两棵二叉树是否相同,若相同,则subRoot是root的子树;
若不相同,则判断root的左子树是否与subRoot是否相同,若相同,则subRoot是root的子树;
若不同,判断root的右子树是否与subRoot相同,若相同,subRoot是root的子树;
若不同,继续递归判断...
具体实现
1.首先实现判断两棵二叉树是否相同的代码:
(1)若两棵二叉树都为空,则两颗二叉树相同;若两颗二叉树中只有一棵树为空,则不同
(2)若两棵二叉树都不为空,再判断其根节点的值是否相同,若不相同,两棵二叉树不相同;若相同,再分别判断两颗二叉树的左子树是否相同,右子树是否相同。(通过递归实现)
具体过程:
代码实现:
public boolean isSameTree(TreeNode p, TreeNode q) {
//都为null,相同
if(p == null && q == null){
return true;
}
//只有一个为null,不同
if(p == null|| q == null){
return false;
}
//都不为空,但值不为空,不同
if(p.val != q.val){
return false;
}
//判断两颗二叉树的左子树、右子树是否相同
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
2.判断subRoot是否为root子树
(1)若subRoot为空,则subRoot为root的子树,返回true
(2)若root为空,则subRoot不为root的子树。返回false
(1)判断subRoot是否与root相同
(2)判断subRoot是否是root的左子树
(3)判断subRoot是否是root的右子树
若都不相同,最后返回false
具体过程:
代码实现:
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(subRoot == null){
return true;
}
if(root == null) {
return false;
}
//1、是不是和根节点相同
if(isSameTree(root,subRoot)) {
return true;
}
//2、判断是不是root的左子树
if(isSubtree(root.left,subRoot)) {
return true;
}
//3、右子树
if(isSubtree(root.right,subRoot)) {
return true;
}
//4、返回
return false;
}
完整代码
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}
if(p == null|| q == null){
return false;
}
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(subRoot == null){
return true;
}
if(root == null) {
return false;
}
//1、是不是和根节点相同
if(isSameTree(root,subRoot)) {
return true;
}
//2、判断是不是root的左子树
if(isSubtree(root.left,subRoot)) {
return true;
}
//3、右子树
if(isSubtree(root.right,subRoot)) {
return true;
}
//4、返回
return false;
}
}
题目来自:文章来源:https://www.toymoban.com/news/detail-715440.html
572. 另一棵树的子树 - 力扣(LeetCode)文章来源地址https://www.toymoban.com/news/detail-715440.html
到了这里,关于Java另一棵树的子树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!