【数据结构练习题】二叉树(1)——1.相同的树2.另一颗树的子树3.翻转二叉树4.平衡二叉树5.对称二叉树

在这里插入图片描述
♥♥♥♥♥个人主页♥♥♥♥♥
♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥
♥♥♥♥♥上一章:队——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代码实现

评论 64
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

《冰美式与三明治》

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值