数据结构:选择题+编程题(每日一练)

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:单值二叉树

思路一:

题二:二叉树的最大深度

思路一:

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

[感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!](#感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!)


选择题:

题一:

1. 一颗拥有1000个结点的树度为4,则它的最小深度是( )

**A.**5

B.6

**C.**7

**D.**8
答案解析:

如果这棵树每一层都是满的,则它的深度最小,假设它为一个四叉树,高度为h,则这个数的节点个数为(4^h - 1) / 3,当h = 5, 最大节点数为341, 当h = 6, 最大节点数为1365,所以最小深度应该为6。

题二:

2. 设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为( )个

**A.**11

**B.**12​

C.13

**D.**14
答案解析:

设Ni表示度为i的节点个数,则节点总数 N = N0 + N1 + N2

节点个数于节点边的关系: N个节点的树有N-1个边

边与度的关系:N - 1 = N1 + 2 * N2

故:N0 + N1 + N2 - 1 = N1 + 2 * N2

因此,得:N0 = N2 + 1

回到原题,N0 = 3,N1 = 8,可得N2 = 2。

因此答案是 3 + 8 + 2 = 13。

题三:

3. 在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个

**A.**4

**B.**5

C.6

**D.**7
答案解析:

设度为i的节点个数为ni, 该树总共有n个节点,则n=n0+n1+n2+n3.

有n个节点的树的总边数为n-1条.

根据度的定义,总边数与度之间的关系为:n-1=0*n0+1*n1+2*n2+3*n3.

联立两个方程求解,可以得到n0 = n2 + 2n3 + 1, n0=6

题四:

4. 下列关于二叉树的叙述错误的是( )

A.二叉树指的是深度为 2 的树

**B.**一个 n 个结点的二叉树将拥有 n-1 条边

**C.**一颗深度为 h 的满二叉树拥有 2^h-1 个结点(根结点深度为1)

**D.**二叉树有二叉链和三叉链两种表示方式
答案解析:

A错误: 二叉树指最大孩子个数为2,即树的度为二的树。深度描述的为树的层数。

B正确: 对于任意的树都满足:边的条数比节点个数少1,因为每个节点都有双亲,但是根节点没有

C正确: 正确,参加二叉树性质

D正确: 二叉链一般指孩子表示法,三叉连指孩子双亲表示法,这两种方式是二叉树最常见的表示方式,虽然还有孩子兄弟表示法,该中表示方式本质也是二叉链

题五:

5. 下列关于堆的叙述错误的是( )

**A.**堆是一种完全二叉树

**B.**堆通常使用顺序表存储

C.小堆指的是左右孩子结点都比根结点小的堆

**D.**堆的删除是将尾部结点放到队顶后执行向下调整算法
答案解析:

堆是在完全二叉树的基础上进行了条件的限制,即:每个节点都比其孩子节点大,则为大堆;每个节点都比其孩子节点小则为小堆完全二叉树比较适合使用顺序结构存储。

堆删除:删的是堆顶元素,常见操作是将堆顶元素与堆中最后一个元素交换,然后对中元素个数减少一个,重新将堆顶元素往下调整故C错误

编程题:

题一:单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

思路一:

对整棵二叉树进行遍历比较!!!

第一步:优先判断树是否为空,空树为真;

第二步:判断左树是否存在且左树值等于根值,然后再判断右树存在且右树值等于根值;

第三步:最后,以当前为节点遍历左子树和右子树。

cpp 复制代码
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);
}

题二:二叉树的最大深度

104. 二叉树的最大深度 - 力扣(LeetCode)

思路一:

**第一步:判断树是否为空,**为空返回0;

第二步:定义一个leftdeep:记录除根层以外左子树层数;定义一个rightdeep:记录除根层以右左子树层数;

第三步: 当遍历到树的子节点返回值最大的值+1(加上当前层).

cpp 复制代码
int maxDepth(struct TreeNode* root)
{   
    if(root == NULL)
        return 0;

    //记录除根层以外左子树层数
    int leftdeep = maxDepth(root->left);
    //记录除根层以外右子树层数
    int rightdeep = maxDepth(root->right);

    
    return leftdeep > rightdeep ? leftdeep+1 : rightdeep+1;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

相关推荐
洋24019 分钟前
C语言常用标准库函数
c语言·开发语言
王哈哈^_^25 分钟前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城27 分钟前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
是瑶瑶子啦39 分钟前
【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)
论文阅读·人工智能·深度学习·视觉检测·空间变换
脉牛杂德43 分钟前
多项式加法——C语言
数据结构·c++·算法
legend_jz1 小时前
STL--哈希
c++·算法·哈希算法
徐嵌1 小时前
STM32项目---畜牧定位器
c语言·stm32·单片机·物联网·iot
kingmax542120081 小时前
初三数学,最优解问题
算法
一直学习永不止步1 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g