
♥♥♥♥♥个人主页♥♥♥♥♥
♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥
♥♥♥♥♥上一章:队——1.用队实现栈2.用栈实现队♥♥♥♥♥
文章目录
1.相同的树
1.1题目描述
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
1.2 思路分析
此题可以采用子问题的方式去解答
基本思想:
只要确定根结点结构上和值都是相同的,后面直接去递归根结点的左右子树即可。
判断根结点的结构与值:
1.结构上:
1.1 一个根结点为空,另一个根结点不为空,则返回false
1.2两个根结点都为空,则返回true
2.结构上相同但根结点的值不同,返回false
3.根结点结构和值都相同,返回true
1.3绘图分析
1.结构上:
1.1 一个根结点为空,另一个根结点不为空:

1.2两个根结点都为空:

2.结构上相同但根结点的值不同:

3.根结点结构和值都相同:

1.4代码实现
//判断相同的树
public boolean isSameTree(TreeNode p, TreeNode q) {
//1.结构上
//1.1 一个根结点为空,另一个不为空
if(p == null && q != null || p != null && q == null) {
return false;
}
//1.2 两个根结点都为空
if(p == null && q == null) {
return true;
}
//2.根的值不相同
if(p.val != q.val) {
return false;
}
//到了这里说明根结点相同并且也相同
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
2.另一颗树的子树
2.1问题描述
给你两棵二叉树 root 和 subRoot ,检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树,如果存在返回 true 否则返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
2.2思路分析
基本思想:
同样去用子问题的思想去剖析这个问题,先判断这个 subRoot 是不是root的子树,然后再去通过递归的方式判断是不是root左右子树的子树
思路描述:
1.先判断 subRoot 是否为root的子树
2.再去判断 subRoot 是否为root.left的子树
3.最后去判断 subRoot 是否为root.right的子树
2.3绘图分析
1.先判断 subRoot 是否为root的子树:

2.再去判断 subRoot 是否为root.left的子树:

3.最后去判断 subRoot 是否为root.right的子树:

2.4代码实现

最低0.47元/天 解锁文章
1509





