数据结构初阶之二叉树性质练习与代码练习

这篇具有很好参考价值的文章主要介绍了数据结构初阶之二叉树性质练习与代码练习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题       数据结构初阶    Linux

欢迎大家点赞,评论,收藏。

一起努力,共赴大厂。

目录

1.前言

2.性质练习

3.代码练习 

3.1单值二叉树

3.2检查两颗树是否相同

3.3对称二叉树

3.4另一颗树的子树

4.总结


1.前言

        二叉树的学习是枯燥的也是充满乐趣的,它的核心部分是递归,这就需要我们多去刷题,树是一对多的结构,你是否还记得我在上一篇中写到树的内容可以分为根节点,左孩子右孩子,左子树右子树和根节点,左子树右子树这两种方法吗?这两种非常的重要,今天我们的代码部分会让你深刻的了解这句话,没有看上一篇对二叉树的解析的小伙伴可以去我主页进行查找。

2.性质练习

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
A 不存在这样的二叉树
B 200
C 198
D 199

        我们根据二叉树的性质,只要是二叉树就会有度为0的节点个数等于度为2的节点个数加1,所以我们可以得到叶子节点的个数为200个,选择b。

 2.下列数据结构中,不适合采用顺序存储结构的是( )
A 非完全二叉树
B 堆
C 队列
D 栈

        虽然这几种都可以采用顺序表进行存储,但是非完全二叉树存储起来比较困难,主要是我们不容易找到父节点和孩子节点的位置,所以选择A。 

3.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A n
B n+1
C n-1
D n/2

        我们知道二叉树有度为0,度为1,度为2,这三种所以我们可以得到n0+n1+n2=2n,我们在根据性质度为0的节点个数等于度为2的节点个数加1得到2n0+n1-1=2n.由于是完全二叉树,所以我们可以知道度为1的节点只能是0或1我们带入后可以知道有一个,所以叶子节点个数为n,所以选择A。

4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )
A 11
B 10
C 8
D 12

        我们根据二叉树的深度为log(n+1),我们可以得到为10,所以选择B。

5.一个具有767个节点的完全二叉树,其叶子节点个数为()
A 383
B 384
C 385
D 386

        我们根据最后一个节点编号为766,它的父节点为(766-1)/2=382,所以叶子节点个数为766-382=384.所以我们选择B。

3.代码练习 

3.1单值二叉树

965. 单值二叉树

已解答

简单

相关标签

相关企业

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

示例 1:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:[2,2,2,5,2]
输出:false

        在这里我们分为根节点,左孩子右孩子,左子树右子树进行解题,当我们的根节点为空时返回true,当我们的左孩子不为空且值与根节点不同时返回false,当右孩子不为空且值与根节点不同时返回false,然后判断左子树与右子树,代码如下:

bool isUnivalTree(struct TreeNode* root) {
    if(root==NULL)
        return true;
    if(root->left&&root->left->val!=root->val)
        return false;
    if(root->right&&root->right->val!=root->val)
        return false;
    return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

3.2检查两颗树是否相同

100. 相同的树

已解答

简单

相关标签

相关企业

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:p = [1,2,1], q = [1,1,2]
输出:false

        在这里我们分为根节点,左子树右子树,当我们的根节点都为空时返回true,当其中一个为空,另一个不为空时返回false,当都不为空时值不相同返回false,然后在判断左子树和右子树,详细代码如下:

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
        return true;
    if(p==NULL&&q!=NULL)
        return false;
    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);
}

3.3对称二叉树

101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:root = [1,2,2,null,3,null,3]
输出:false

        我们根据根节点,左孩子右孩子,左子树右子树进行判断,我们先判断根节点是否为空,为空返回false,然后判断左孩子和右孩子是否相同,然后返回左子树和右子树,这时候我们就将问题转化为判断左子树和右子树是否是同一颗树,我们就将问题转化为根节点,左子树右子树的问题,先判断权为空返回true,一个为空另一个不为空返回false,都不是空但是值不相同反水false,然后反水左子树与右子树。详细代码如下:

bool mysymmentric(struct TreeNode* p,struct TreeNode* q)
{
    if(p==NULL&&q==NULL)
        return true;
    if(p&&q&&q->val!=p->val)
        return false;
    if(p==NULL&&q!=NULL)
        return false;
    if(p!=NULL&&q==NULL)
        return false;
    return mysymmentric(p->right,q->left)&&mysymmentric(p->left,q->right);
    
}
bool isSymmetric(struct TreeNode* root) {
    if(root==NULL)
        return true;
    if(root->left==NULL&&root->right!=NULL)
        return false;
    if(root->right==NULL&&root->left!=NULL)
        return false;
    return mysymmentric(root->left,root->right);
}

3.4另一颗树的子树

572. 另一棵树的子树

已解答

简单

相关标签

相关企业

提示

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true

示例 2:

数据结构初阶之二叉树性质练习与代码练习,数据结构初阶,数据结构

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false

       我们同样将问题转化为根节点,左子树右子树,当根结点为空时返回false,当根节点的值与它相同时进行判断是不是为相同的树,这是时候我们还是根节点,左子树右子树进行判断,当都为空时返回true,只有一个为空时返回fasle,值不相同时返回false,然后进行判断左子树右子树。然后判断左子树与右子树。详细代码如下:

bool issampetree(struct TreeNode* root1,struct TreeNode* root2)
{
    if(root1==NULL&&root2==NULL)
        return true;
    if(root1==NULL&&root2!=NULL)
        return false;
    if(root2==NULL&&root1!=NULL)
        return false;
    if(root1->val!=root2->val)
        return false;
    return issampetree(root1->right,root2->right)&&issampetree(root1->left,root2->left);

}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    if(root->val==subRoot->val)
    {
        if(issampetree(root,subRoot))
            return true;
    }
    return isSubtree(root->right,subRoot)||isSubtree(root->left,subRoot);
}

4.总结

        今天的内容就到这里了,想要学好二叉树就需要多练,可以多看看这篇文章和上一篇二叉树的文章,相信大家可以学到很多,其实二叉树就是递归,多画几次递归展开图就能理解其中是如何运行的。最后别忘了三连呀。文章来源地址https://www.toymoban.com/news/detail-763587.html

到了这里,关于数据结构初阶之二叉树性质练习与代码练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构之二叉树和平衡二叉树

    1、二叉树: 2、平衡二叉树:

    2024年04月17日
    浏览(44)
  • 11. 数据结构之二叉树

    上一节,简单概述了树这种数据结构,以及树结构向下,具有某些一些特征的树,比如二叉树,B树,B+树,堆等。其中,二叉树是一个很重要的模块。也是在一些技术面试中,可能会问到的问题。本节,我们就二叉树,做详细介绍。 二叉树是一个 逻辑结构 , 底层可以用数组

    2024年02月07日
    浏览(45)
  • 数据结构之二叉树(详细版)

            二叉树作为数据结构的一种,尤为重要,下面是对二叉树的详细讲解。想要了解二叉树,首先要了解 二叉树的基本概念,以及创建二叉树的结构,再深层点,遍历二叉树的前序中序和后续,其次是层序,后面将会讲解如何计算二叉树的高和叶结点 等等。        

    2024年02月03日
    浏览(46)
  • 数据结构之二叉树(Java)

    在这里先说明一下,结点和节点其实一样的,无须关注这个。 1. 概念:树是一种非线性的数据结构,它是由n个有限节点组成一个具有层次关系的集合。 如上图所示,把此种数据结构称作树是因为它看起来像一个倒挂的树。  2. 特点 有一个特殊的节点,称为根节点,它是唯一

    2024年02月07日
    浏览(38)
  • 数据结构之二叉树简介

    二叉树是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表相似,二叉树的基本单元是节点,每个节点包含值,左子节点的索引,右子节点的索引 当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成

    2024年02月01日
    浏览(44)
  • 《数据结构与算法》之二叉树(补充树)

    二叉搜索树,也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空,如果不为空,应该满足以下性质: 非空左子树的所有结点小于其根结点的键值 非空右子树的所有结点大于其根结点的键值 左右子树都是二叉搜索树 对于二叉树的查找,其实沿用的是分治法的

    2024年02月08日
    浏览(48)
  • 数据结构之二叉树的实现

    目录 前言 1. 二叉树的遍历 1.1二叉树的前、中、后序遍历 1.2 层序遍历 2.二叉树的实现 2.1 二叉树的结构 2.2构建二叉树  2.2 前序遍历的实现 2.3 中序遍历的实现 2.4 后序遍历的实现 2.5 计算树的节点个数 2.6 计算树的深度 2.7 计算叶子节点个数 2.8 计算树第k层的节点数 2.9 以内容

    2023年04月10日
    浏览(48)
  • 数据结构之二叉树的性质与存储结构

      数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用

    2024年01月21日
    浏览(48)
  • 数据结构之二叉树的数组表示

    若某节点的索引为 i ,则该节点的左子节点的索引为 2i+1 ,右子节点的索引为 2i+2 给定某节点,获取它的左右字节点,父节点 获取前序遍历,中序遍历,后序遍历,层序遍历

    2024年01月18日
    浏览(51)
  • 【数据结构之二叉树的构建和遍历】

    前言: 前篇学习了 数据结构之树和二叉树的基本概念知识,那么这篇继续完善二叉树的相关知识并完成实现二叉树的构建和遍历的内容。 / 知识点汇总 / 因为前篇已经非常详细的单独学习了数和二叉树的基本知识概念,那么这里就简单回顾一下即可。 概念 : 二叉树(Bina

    2024年02月21日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包