首页 > 基础资料 博客日记
Java另一棵树的子树
2023-10-25 17:55:35基础资料围观230次
目录
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;
}
}
题目来自:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:JDK的安装完整教程
下一篇:Java 实现文件复制及文件夹复制