目录 1.题目描述 2.题解 思路分析 具体实现 完整代码 1.题目描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回
目录
给你两棵二叉树 root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回 true
;否则,返回 false
。
二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
示例:
输入:root = [3, 4, 5, 1, 2],subRoot = [4, 1, 2]
输出:true
我们首先判断两棵二叉树是否相同,若相同,则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://blog.csdn.net/2301_76161469/article/details/133655364
--结束END--
本文标题: Java另一棵树的子树
本文链接: https://www.lsjlt.com/news/429463.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0